home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_gawk.idb / usr / freeware / catman / u_man / cat1 / gawk.Z / gawk
Text File  |  2002-07-08  |  92KB  |  1,821 lines

  1. GAWK(1)             Utility Commands          GAWK(1)
  2.  
  3.  
  4.  
  5. NNAAMMEE
  6.        gawk - pattern scanning and processing language
  7.  
  8. SSYYNNOOPPSSIISS
  9.        ggaawwkk [ POSIX or GNU style options ] --ff _p_r_o_g_r_a_m_-_f_i_l_e [ ----    ]
  10.        file ...
  11.        ggaawwkk [ POSIX or GNU style options ] [  ----  ]  _p_r_o_g_r_a_m_-_t_e_x_t
  12.        file ...
  13.  
  14.        ppggaawwkk  [    POSIX or GNU style options ] --ff    _p_r_o_g_r_a_m_-_f_i_l_e [ ----
  15.        ] file ...
  16.        ppggaawwkk [ POSIX or    GNU style options ] [ ----  ]  _p_r_o_g_r_a_m_-_t_e_x_t
  17.        file ...
  18.  
  19. DDEESSCCRRIIPPTTIIOONN
  20.        _G_a_w_k  is     the GNU Project's implementation of the AWK pro
  21.        gramming    language.  It conforms to the definition  of  the
  22.        language     in  the POSIX 1003.2 Command Language And Utili
  23.        ties Standard.  This version  in     turn  is  based  on  the
  24.        description  in    _T_h_e  _A_W_K  _P_r_o_g_r_a_m_m_i_n_g  _L_a_n_g_u_a_g_e,  by Aho,
  25.        Kernighan, and Weinberger, with    the  additional     features
  26.        found in    the System V Release 4 version of UNIX _a_w_k.  _G_a_w_k
  27.        also provides more recent  Bell    Laboratories  _a_w_k  exten
  28.        sions, and a number of GNU-specific extensions.
  29.  
  30.        _P_g_a_w_k  is  the profiling    version    of _g_a_w_k.  It is    identical
  31.        in every    way  to     _g_a_w_k,    except    that  programs    run  more
  32.        slowly, and it automatically produces an    execution profile
  33.        in the file aawwkkpprrooff..oouutt    when  done.   See  the    ----pprrooffiillee
  34.        option, below.
  35.  
  36.        The  command  line consists of options to _g_a_w_k itself, the
  37.        AWK program text    (if not    supplied via  the  --ff  or  ----ffiillee
  38.        options),  and values to    be made    available in the AARRGGCC and
  39.        AARRGGVV pre-defined    AWK variables.
  40.  
  41. OOPPTTIIOONN FFOORRMMAATT
  42.        _G_a_w_k options may    be either traditional  POSIX  one  letter
  43.        options,     or  GNU style long options.  POSIX options start
  44.        with a single "-", while    long  options  start  with  "--".
  45.        Long  options  are provided for both GNU-specific features
  46.        and for POSIX-mandated features.
  47.  
  48.        Following the POSIX standard,  _g_a_w_k-specific  options  are
  49.        supplied     via  arguments     to  the  --WW option.  Multiple --WW
  50.        options may be supplied Each --WW option has a corresponding
  51.        long option, as detailed    below.    Arguments to long options
  52.        are either joined with the option by an ==  sign,     with  no
  53.        intervening  spaces,  or     they may be provided in the next
  54.        command line argument.  Long options may     be  abbreviated,
  55.        as long as the abbreviation remains unique.
  56.  
  57. OOPPTTIIOONNSS
  58.        _G_a_w_k accepts the    following options, listed alphabetically.
  59.  
  60.        --FF _f_s
  61.        ----ffiieelldd--sseeppaarraattoorr _f_s
  62.           Use _f_s for the input field separator (the    value  of
  63.           the FFSS predefined    variable).
  64.  
  65.        --vv _v_a_r==_v_a_l
  66.        ----aassssiiggnn    _v_a_r==_v_a_l
  67.           Assign  the  value  _v_a_l to the variable _v_a_r, before
  68.           execution    of the    program     begins.   Such     variable
  69.           values  are  available to    the BBEEGGIINN block    of an AWK
  70.           program.
  71.  
  72.        --ff _p_r_o_g_r_a_m_-_f_i_l_e
  73.        ----ffiillee _p_r_o_g_r_a_m_-_f_i_l_e
  74.           Read the AWK program source from the file     _p_r_o_g_r_a_m_-
  75.           _f_i_l_e,  instead of    from the first command line argu
  76.           ment.  Multiple --ff (or ----ffiillee) options may be used.
  77.  
  78.        --mmff _N_N_N
  79.        --mmrr _N_N_N
  80.           Set  various memory limits to the    value _N_N_N.  The    ff
  81.           flag sets    the maximum number of fields, and  the    rr
  82.           flag sets    the maximum record size.  These    two flags
  83.           and the --mm option    are from  the  Bell  Laboratories
  84.           research    version    of UNIX    _a_w_k.  They are ignored by
  85.           _g_a_w_k, since _g_a_w_k has no pre-defined limits.
  86.  
  87.        --WW ccoommppaatt
  88.        --WW ttrraaddiittiioonnaall
  89.        ----ccoommppaatt
  90.        ----ttrraaddiittiioonnaall
  91.           Run in _c_o_m_p_a_t_i_b_i_l_i_t_y mode.  In compatibility  mode,
  92.           _g_a_w_k  behaves  identically to UNIX _a_w_k; none of the
  93.           GNU-specific extensions are recognized.  The use of
  94.           ----ttrraaddiittiioonnaall  is    preferred over the other forms of
  95.           this option.  See    GGNNUU EEXXTTEENNSSIIOONNSS,    below,    for  more
  96.           information.
  97.  
  98.        --WW ccooppyylleefftt
  99.        --WW ccooppyyrriigghhtt
  100.        ----ccooppyylleefftt
  101.        ----ccooppyyrriigghhtt
  102.           Print the    short version of the GNU copyright infor
  103.           mation message on    the standard output and    exit suc
  104.           cessfully.
  105.  
  106.        --WW dduummpp--vvaarriiaabblleess[==_f_i_l_e]
  107.        ----dduummpp--vvaarriiaabblleess[==_f_i_l_e]
  108.           Print  a    sorted    list  of  global variables, their
  109.           types and    final values to    _f_i_l_e.  If no _f_i_l_e is pro
  110.           vided,  _g_a_w_k  uses  a file named _a_w_k_v_a_r_s_._o_u_t in the
  111.           current directory.
  112.           Having a list of all the global variables    is a good
  113.           way  to  look for    typographical errors in    your pro
  114.           grams.  You would    also use this option if    you  have
  115.           a     large    program     with a    lot of functions, and you
  116.           want to be sure that your    functions don't     inadver
  117.           tently  use  global  variables that you meant to be
  118.           local.  (This is a  particularly    easy  mistake  to
  119.           make  with  simple variable names    like ii,    jj, and so
  120.           on.)
  121.  
  122.        --WW hheellpp
  123.        --WW uussaaggee
  124.        ----hheellpp
  125.        ----uussaaggee
  126.           Print a relatively short summary of  the    available
  127.           options  on the standard output.    (Per the _G_N_U _C_o_d_
  128.           _i_n_g _S_t_a_n_d_a_r_d_s, these options  cause  an  immediate,
  129.           successful exit.)
  130.  
  131.        --WW lliinntt[==ffaattaall]
  132.        ----lliinntt[==ffaattaall]
  133.           Provide  warnings    about constructs that are dubious
  134.           or non-portable to other AWK implementations.  With
  135.           an optional argument of ffaattaall, lint warnings become
  136.           fatal errors.  This may be  drastic,  but     its  use
  137.           will certainly encourage the development of cleaner
  138.           AWK programs.
  139.  
  140.        --WW lliinntt--oolldd
  141.        ----lliinntt--oolldd
  142.           Provide warnings    about  constructs  that     are  not
  143.           portable to the original version of Unix _a_w_k.
  144.  
  145.        --WW ggeenn--ppoo
  146.        ----ggeenn--ppoo
  147.           Scan  and    parse the AWK program, and generate a GNU
  148.           ..ppoo format file on standard output with entries for
  149.           all  localizable    strings    in the program.     The pro
  150.           gram itself is not executed.  See    the  GNU  _g_e_t_t_e_x_t
  151.           distribution for more information    on ..ppoo files.
  152.  
  153.        --WW nnoonn--ddeecciimmaall--ddaattaa
  154.        ----nnoonn--ddeecciimmaall--ddaattaa
  155.           Recognize     octal    and  hexadecimal  values in input
  156.           data.  _U_s_e _t_h_i_s _o_p_t_i_o_n _w_i_t_h _g_r_e_a_t    _c_a_u_t_i_o_n_!
  157.  
  158.        --WW ppoossiixx
  159.        ----ppoossiixx
  160.           This turns on _c_o_m_p_a_t_i_b_i_l_i_t_y mode,    with the  follow
  161.           ing additional restrictions:
  162.  
  163.            \\xx escape sequences are not recognized.
  164.  
  165.            Only  space  and    tab act    as field separators when
  166.         FFSS is set to a single space, newline does not.
  167.  
  168.            You cannot continue lines after ??  and ::.
  169.  
  170.            The synonym ffuunncc    for the    keyword    ffuunnccttiioonn is  not
  171.         recognized.
  172.  
  173.            The  operators **** and ****== cannot    be used    in place
  174.         of ^^ and ^^==.
  175.  
  176.            The fffflluusshh(()) function is    not available.
  177.  
  178.        --WW pprrooffiillee[==_p_r_o_f___f_i_l_e]
  179.        ----pprrooffiillee[==_p_r_o_f___f_i_l_e]
  180.           Send profiling data to _p_r_o_f___f_i_l_e.     The  default  is
  181.           aawwkkpprrooff..oouutt.   When  run    with _g_a_w_k, the profile is
  182.           just a "pretty printed"  version    of  the     program.
  183.           When run with _p_g_a_w_k, the profile contains    execution
  184.           counts of    each statement in the program in the left
  185.           margin  and  function  call  counts  for each user-
  186.           defined function.
  187.  
  188.        --WW rree--iinntteerrvvaall
  189.        ----rree--iinntteerrvvaall
  190.           Enable the use of    _i_n_t_e_r_v_a_l _e_x_p_r_e_s_s_i_o_n_s  in  regular
  191.           expression   matching   (see  RReegguullaarr  EExxpprreessssiioonnss,
  192.           below).  Interval    expressions were  not  tradition
  193.           ally  available  in  the    AWK  language.    The POSIX
  194.           standard added them, to make _a_w_k and _e_g_r_e_p  consis
  195.           tent with    each other.  However, their use    is likely
  196.           to break old AWK programs, so  _g_a_w_k  only     provides
  197.           them  if    they  are  requested with this option, or
  198.           when ----ppoossiixx is specified.
  199.  
  200.        --WW ssoouurrccee _p_r_o_g_r_a_m_-_t_e_x_t
  201.        ----ssoouurrccee    _p_r_o_g_r_a_m_-_t_e_x_t
  202.           Use _p_r_o_g_r_a_m_-_t_e_x_t as AWK program source code.   This
  203.           option allows the    easy intermixing of library func
  204.           tions (used via the --ff  and  ----ffiillee  options)  with
  205.           source  code  entered  on     the command line.  It is
  206.           intended primarily for medium to large AWK programs
  207.           used in shell scripts.
  208.  
  209.        --WW vveerrssiioonn
  210.        ----vveerrssiioonn
  211.           Print  version information for this particular copy
  212.           of _g_a_w_k on the standard  output.     This  is  useful
  213.           mainly  for  knowing if the current copy of _g_a_w_k on
  214.           your system is up    to date    with respect to     whatever
  215.           the Free Software    Foundation is distributing.  This
  216.           is also useful when reporting bugs.  (Per     the  _G_N_U
  217.           _C_o_d_i_n_g _S_t_a_n_d_a_r_d_s,    these options cause an immediate,
  218.           successful exit.)
  219.  
  220.        ----     Signal the end of    options. This is useful    to  allow
  221.           further  arguments  to  the  AWK    program    itself to
  222.           start with a "-".     This is mainly     for  consistency
  223.           with  the     argument parsing convention used by most
  224.           other POSIX programs.
  225.        In compatibility    mode, any other    options     are  flagged  as
  226.        invalid,     but are otherwise ignored.  In    normal operation,
  227.        as long as program text has been    supplied, unknown options
  228.        are  passed  on    to  the    AWK program in the AARRGGVV    array for
  229.        processing.  This is particularly useful    for  running  AWK
  230.        programs    via the    "#!" executable    interpreter mechanism.
  231. AAWWKK PPRROOGGRRAAMM EEXXEECCUUTTIIOONN
  232.        An  AWK    program     consists of a sequence    of pattern-action
  233.        statements and optional function    definitions.
  234.           _p_a_t_t_e_r_n    {{ _a_c_t_i_o_n _s_t_a_t_e_m_e_n_t_s }}
  235.           ffuunnccttiioonn _n_a_m_e((_p_a_r_a_m_e_t_e_r _l_i_s_t)) {{ _s_t_a_t_e_m_e_n_t_s }}
  236.        _G_a_w_k first reads    the  program  source  from  the     _p_r_o_g_r_a_m_-
  237.        _f_i_l_e(s)    if specified, from arguments to    ----ssoouurrccee, or from
  238.        the first non-option argument on    the command line.  The --ff
  239.        and  ----ssoouurrccee  options  may  be used multiple times on the
  240.        command line.  _G_a_w_k reads the program text as if     all  the
  241.        _p_r_o_g_r_a_m_-_f_i_l_es  and command line source texts had    been con
  242.        catenated together.  This is useful for building    libraries
  243.        of  AWK    functions, without having to include them in each
  244.        new AWK program that uses  them.      It  also  provides  the
  245.        ability    to  mix     library functions with    command    line pro
  246.        grams.
  247.        The environment variable    AAWWKKPPAATTHH    specifies a  search  path
  248.        to use when finding source files    named with the --ff option.
  249.        If this variable    does  not  exist,  the    default     path  is
  250.        ""..:://uussrr//llooccaall//sshhaarree//aawwkk"".  (The actual directory    may vary,
  251.        depending upon how _g_a_w_k was built and  installed.)   If    a
  252.        file name given to the --ff option    contains a "/" character,
  253.        no path search is performed.
  254.        _G_a_w_k executes AWK programs in the following order.  First,
  255.        all  variable  assignments specified via    the --vv option are
  256.        performed.  Next, _g_a_w_k compiles the program into    an inter
  257.        nal  form.   Then,  _g_a_w_k     executes  the    code in    the BBEEGGIINN
  258.        block(s)    (if any), and then proceeds  to     read  each  file
  259.        named  in  the AARRGGVV array.  If there are    no files named on
  260.        the command line, _g_a_w_k reads the    standard input.
  261.        If a filename on    the command line has the form _v_a_r==_v_a_l  it
  262.        is  treated  as    a  variable assignment.     The variable _v_a_r
  263.        will be assigned    the value _v_a_l.    (This happens  after  any
  264.        BBEEGGIINN  block(s)    have  been  run.)   Command line variable
  265.        assignment is most useful for dynamically assigning values
  266.        to  the    variables AWK uses to control how input    is broken
  267.        into fields and records.     It is also useful  for     control
  268.        ling  state  if    multiple  passes are needed over a single
  269.        data file.
  270.        If the value of a particular  element  of  AARRGGVV    is  empty
  271.        (""""), _g_a_w_k skips    over it.
  272.        For  each  record  in  the  input, _g_a_w_k tests to    see if it
  273.        matches any _p_a_t_t_e_r_n in the AWK program.    For each  pattern
  274.        that  the  record  matches,  the    associated _a_c_t_i_o_n is exe
  275.        cuted.  The patterns are    tested in the order they occur in
  276.        the program.
  277.        Finally,     after    all the    input is exhausted, _g_a_w_k executes
  278.        the code    in the EENNDD block(s) (if    any).
  279. VVAARRIIAABBLLEESS,, RREECCOORRDDSS AANNDD FFIIEELLDDSS
  280.        AWK variables are dynamic; they come into  existence  when
  281.        they  are  first     used.    Their values are either    floating-
  282.        point numbers or    strings, or both, depending upon how they
  283.        are  used.   AWK     also  has one dimensional arrays; arrays
  284.        with multiple dimensions    may be simulated.   Several  pre-
  285.        defined variables are set as a program runs; these will be
  286.        described as needed and summarized below.
  287.    RReeccoorrddss
  288.        Normally, records are  separated     by  newline  characters.
  289.        You  can     control  how  records are separated by    assigning
  290.        values to the built-in variable RRSS.  If RRSS is  any  single
  291.        character,  that     character separates records.  Otherwise,
  292.        RRSS is a    regular     expression.   Text  in     the  input  that
  293.        matches    this  regular  expression  separates  the record.
  294.        However,    in compatibility mode, only the     first    character
  295.        of its string value is used for separating records.  If RRSS
  296.        is set to the null string, then records are  separated  by
  297.        blank  lines.  When RRSS is set to    the null string, the new
  298.        line character always acts as a field separator,    in  addi
  299.        tion to whatever    value FFSS may have.
  300.    FFiieellddss
  301.        As  each    input record is    read, _g_a_w_k splits the record into
  302.        _f_i_e_l_d_s, using the value of the FFSS variable  as  the  field
  303.        separator.   If FFSS is a single character, fields    are sepa
  304.        rated by    that character.     If FFSS is the null  string,  then
  305.        each  individual    character becomes a separate field.  Oth
  306.        erwise, FFSS is expected to be a  full  regular  expression.
  307.        In  the special case that FFSS is a single    space, fields are
  308.        separated by runs of spaces and/or tabs    and/or    newlines.
  309.        (But  see  the  discussion  of ----ppoossiixx, below).    NNOOTTEE:: The
  310.        value of    IIGGNNOORREECCAASSEE (see    below) also  affects  how  fields
  311.        are split when FFSS is a regular expression, and how records
  312.        are separated when RRSS is    a regular expression.
  313.        If the FFIIEELLDDWWIIDDTTHHSS variable is set to  a     space    separated
  314.        list  of     numbers,  each     field    is expected to have fixed
  315.        width, and _g_a_w_k splits up the record using  the    specified
  316.        widths.     The  value  of     FFSS  is    ignored.  Assigning a new
  317.        value to    FFSS overrides the use of    FFIIEELLDDWWIIDDTTHHSS, and restores
  318.        the default behavior.
  319.        Each  field  in    the input record may be    referenced by its
  320.        position, $$11, $$22, and so    on.   $$00  is  the  whole  record.
  321.        Fields need not be referenced by    constants:
  322.           nn    == 55
  323.           pprriinntt $$nn
  324.        prints the fifth    field in the input record.
  325.        The  variable  NNFF  is set to the    total number of    fields in
  326.        the input record.
  327.        References to non-existent fields (i.e. fields after  $$NNFF)
  328.        produce    the  null-string.   However,  assigning    to a non-
  329.        existent    field (e.g., $$((NNFF++22)) == 55) increases the    value  of
  330.        NNFF, creates any intervening fields with the null    string as
  331.        their value, and    causes the value of $$00 to be  recomputed,
  332.        with the    fields being separated by the value of OOFFSS.  Ref
  333.        erences to negative numbered fields cause a  fatal  error.
  334.        Decrementing  NNFF     causes    the values of fields past the new
  335.        value to    be lost, and the value of $$00  to  be  recomputed,
  336.        with the    fields being separated by the value of OOFFSS.
  337.        Assigning  a  value  to an existing field causes    the whole
  338.        record to be rebuilt when $$00  is     referenced.   Similarly,
  339.        assigning  a  value to $$00 causes    the record to be resplit,
  340.        creating    new values for the fields.
  341.    BBuuiilltt--iinn VVaarriiaabblleess
  342.        _G_a_w_k's built-in variables are:
  343.        AARRGGCC       The number of command line arguments    (does not
  344.            include   options  to  _g_a_w_k,     or  the  program
  345.            source).
  346.        AARRGGIINNDD       The index in    AARRGGVV of    the  current  file  being
  347.            processed.
  348.        AARRGGVV       Array of command line arguments.  The array is
  349.            indexed from     0  to    AARRGGCC  -     1.   Dynamically
  350.            changing  the contents of AARRGGVV can control the
  351.            files used for data.
  352.        BBIINNMMOODDEE       On  non-POSIX  systems,   specifies     use   of
  353.            "binary"  mode for all file I/O.  Numeric val
  354.            ues of 1, 2,    or 3, specify that  input  files,
  355.            output  files,  or  all  files,  respectively,
  356.            should use binary I/O.  String values of  ""rr"",
  357.            or  ""ww""  specify  that  input files,    or output
  358.            files, respectively,    should    use  binary  I/O.
  359.            String values of ""rrww"" or ""wwrr"" specify that all
  360.            files should    use binary I/O.     Any other string
  361.            value  is  treated  as  ""rrww"",  but generates    a
  362.            warning message.
  363.        CCOONNVVFFMMTT       The conversion format for numbers, ""%%..66gg"",  by
  364.            default.
  365.        EENNVVIIRROONN       An  array containing    the values of the current
  366.            environment.     The  array  is     indexed  by  the
  367.            environment    variables, each    element    being the
  368.            value of that variable (e.g.,  EENNVVIIRROONN[[""HHOOMMEE""]]
  369.            might  be  //hhoommee//aarrnnoolldd).  Changing this array
  370.            does    not affect the environment seen     by  pro
  371.            grams which _g_a_w_k spawns via redirection or the
  372.            ssyysstteemm(()) function.
  373.        EERRRRNNOO       If a    system error occurs either doing a  redi
  374.            rection  for     ggeettlliinnee,  during a read for ggeett
  375.            lliinnee, or during a  cclloossee(()),    then  EERRRRNNOO  will
  376.            contain  a  string  describing the error.  The
  377.            value is subject to translation in non-English
  378.            locales.
  379.        FFIIEELLDDWWIIDDTTHHSS A  white-space  separated list of fieldwidths.
  380.            When    set, _g_a_w_k parses the input into    fields of
  381.            fixed width,    instead    of using the value of the
  382.            FFSS variable as the field separator.
  383.        FFIILLEENNAAMMEE       The name of the current  input  file.   If  no
  384.            files  are  specified on the    command    line, the
  385.            value of FFIILLEENNAAMMEE is    "-".   However,     FFIILLEENNAAMMEE
  386.            is  undefined  inside  the BBEEGGIINN block (unless
  387.            set by ggeettlliinnee).
  388.        FFNNRR       The input record number in the  current  input
  389.            file.
  390.        FFSS       The input field separator, a    space by default.
  391.            See FFiieellddss, above.
  392.        IIGGNNOORREECCAASSEE  Controls the    case-sensitivity of  all  regular
  393.            expression  and string operations.  If IIGGNNOORREE
  394.            CCAASSEE    has a non-zero value, then string compar
  395.            isons  and  pattern    matching  in rules, field
  396.            splitting with FFSS, record separating    with  RRSS,
  397.            regular expression matching with ~~ and !!~~, and
  398.            the    ggeennssuubb(()),   ggssuubb(()),   iinnddeexx(()),     mmaattcchh(()),
  399.            sspplliitt(()),  and  ssuubb(())     built-in  functions  all
  400.            ignore  case     when  doing  regular  expression
  401.            operations.     NNOOTTEE::    Array subscripting is _n_o_t
  402.            affected, nor is the    aassoorrtt(())    function.
  403.            Thus, if IIGGNNOORREECCAASSEE is not equal to zero, //aaBB//
  404.            matches  all     of the    strings    ""aabb"", ""aaBB"", ""AAbb"",
  405.            and ""AABB"".  As with all AWK variables, the ini
  406.            tial    value of IIGGNNOORREECCAASSEE is zero, so    all regu
  407.            lar expression and string operations    are  nor
  408.            mally  case-sensitive.   Under  Unix, the full
  409.            ISO 8859-1 Latin-1 character    set is used  when
  410.            ignoring case.
  411.        LLIINNTT       Provides  dynamic control of    the ----lliinntt option
  412.            from    within an AWK program.    When  true,  _g_a_w_k
  413.            prints lint warnings. When false, it    does not.
  414.            When    assigned the string value  ""ffaattaall"",  lint
  415.            warnings  become  fatal  errors,  exactly like
  416.            ----lliinntt==ffaattaall.   Any    other  true  value   just
  417.            prints warnings.
  418.        NNFF       The    number    of  fields  in    the current input
  419.            record.
  420.        NNRR       The total number of input records seen so far.
  421.        OOFFMMTT       The    output    format    for  numbers,  ""%%..66gg"", by
  422.            default.
  423.        OOFFSS       The    output    field  separator,  a   space   by
  424.            default.
  425.        OORRSS       The output record separator,    by default a new
  426.            line.
  427.        PPRROOCCIINNFFOO       The elements    of this    array provide  access  to
  428.            information about the running AWK program.  On
  429.            some    systems, there may  be    elements  in  the
  430.            array,  ""ggrroouupp11""  through ""ggrroouupp_n"" for some _n,
  431.            which is the    number    of  supplementary  groups
  432.            that     the process has.  Use the iinn operator to
  433.            test    for these elements.  The  following  ele
  434.            ments are guaranteed    to be available:
  435.            PPRROOCCIINNFFOO[[""eeggiidd""]]   the value    of the _g_e_t_e_g_i_d(2)
  436.                       system call.
  437.            PPRROOCCIINNFFOO[[""eeuuiidd""]]   the value    of the _g_e_t_e_u_i_d(2)
  438.                       system call.
  439.            PPRROOCCIINNFFOO[[""FFSS""]]     ""FFSS""   if     field    splitting
  440.                       with FFSS is  in  effect,  or
  441.                       ""FFIIEELLDDWWIIDDTTHHSS""    if   field
  442.                       splitting    with  FFIIEELLDDWWIIDDTTHHSS
  443.                       is in effect.
  444.            PPRROOCCIINNFFOO[[""ggiidd""]]    the  value of the    _g_e_t_g_i_d(2)
  445.                       system call.
  446.            PPRROOCCIINNFFOO[[""ppggrrppiidd""]] the process group    ID of the
  447.                       current process.
  448.            PPRROOCCIINNFFOO[[""ppiidd""]]    the  process ID of the cur
  449.                       rent process.
  450.            PPRROOCCIINNFFOO[[""ppppiidd""]]   the parent  process  ID  of
  451.                       the current process.
  452.            PPRROOCCIINNFFOO[[""uuiidd""]]    the  value of the    _g_e_t_u_i_d(2)
  453.                       system call.
  454.        RRSS       The input record separator, by default a  new
  455.            line.
  456.        RRTT       The    record    terminator.   _G_a_w_k sets    RRTT to the
  457.            input text that matched the character or regu
  458.            lar expression specified by RRSS.
  459.        RRSSTTAARRTT       The    index  of  the first character matched by
  460.            mmaattcchh(()); 0 if no match.   (This  implies  that
  461.            character indices start at one.)
  462.        RRLLEENNGGTTHH       The    length    of the string matched by mmaattcchh(());
  463.            -1 if no match.
  464.        SSUUBBSSEEPP       The character used to separate  multiple  sub
  465.            scripts  in array elements, by default ""\\003344"".
  466.        TTEEXXTTDDOOMMAAIINN  The text domain of the AWK  program;     used  to
  467.            find     the  localized    translations for the pro
  468.            gram's strings.
  469.    AArrrraayyss
  470.        Arrays are subscripted with an expression  between  square
  471.        brackets     ([[  and  ]]).  If the expression is an expression
  472.        list (_e_x_p_r, _e_x_p_r    ...)   then  the  array     subscript  is    a
  473.        string  consisting  of  the  concatenation of the (string)
  474.        value of    each expression, separated by the  value  of  the
  475.        SSUUBBSSEEPP variable.     This facility is used to simulate multi
  476.        ply dimensioned arrays.    For example:
  477.           ii    == ""AA"";; jj == ""BB"";;    kk == ""CC""
  478.           xx[[ii,, jj,, kk]] == ""hheelllloo,, wwoorrlldd\\nn""
  479.        assigns the string ""hheelllloo,, wwoorrlldd\\nn"" to the element of  the
  480.        array xx which is    indexed    by the string ""AA\\003344BB\\003344CC"".  All
  481.        arrays in AWK are associative, i.e. indexed by string val
  482.        ues.
  483.        The  special  operator  iinn  may    be used    in an iiff or wwhhiillee
  484.        statement to see    if an array has    an index consisting of    a
  485.        particular value.
  486.           iiff ((vvaall iinn aarrrraayy))
  487.            pprriinntt aarrrraayy[[vvaall]]
  488.        If the array has    multiple subscripts, use ((ii,, jj))    iinn aarrrraayy.
  489.        The iinn construct    may also be used in a ffoorr loop to iterate
  490.        over all    the elements of    an array.
  491.        An  element  may    be deleted from    an array using the ddeelleettee
  492.        statement.  The ddeelleettee  statement  may  also  be     used  to
  493.        delete the entire contents of an    array, just by specifying
  494.        the array name without a    subscript.
  495.    VVaarriiaabbllee TTyyppiinngg AAnndd CCoonnvveerrssiioonn
  496.        Variables and fields may    be (floating point)  numbers,  or
  497.        strings,     or  both.  How    the value of a variable    is inter
  498.        preted depends upon its context.     If  used  in  a  numeric
  499.        expression,  it    will be    treated    as a number, if    used as    a
  500.        string it will be treated as a string.
  501.        To force    a variable to be treated as a number,  add  0  to
  502.        it;  to force it    to be treated as a string, concatenate it
  503.        with the    null string.
  504.        When a string must be converted to a number,  the  conver
  505.        sion  is     accomplished  using _s_t_r_t_o_d(3).     A number is con
  506.        verted to a string by using the value of    CCOONNVVFFMMTT    as a for
  507.        mat  string  for    _s_p_r_i_n_t_f(3), with the numeric value of the
  508.        variable    as the argument.  However, even    though    all  num
  509.        bers in AWK are floating-point, integral    values are _a_l_w_a_y_s
  510.        converted as integers.  Thus, given
  511.           CCOONNVVFFMMTT ==    ""%%22..22ff""
  512.           aa    == 1122
  513.           bb    == aa """"
  514.        the variable bb has a string value of ""1122"" and not ""1122..0000"".
  515.        _G_a_w_k performs comparisons as follows: If    two variables are
  516.        numeric,    they are compared numerically.    If one    value  is
  517.        numeric    and  the  other     has  a     string     value    that is    a
  518.        "numeric    string," then comparisons are also  done  numeri
  519.        cally.    Otherwise,  the     numeric  value    is converted to    a
  520.        string and a string comparison is performed.  Two  strings
  521.        are  compared, of course, as strings.  Note that    the POSIX
  522.        standard    applies    the concept of    "numeric  string"  every
  523.        where, even to string constants.     However, this is clearly
  524.        incorrect, and _g_a_w_k does    not do this.  (Fortunately,  this
  525.        is fixed    in the next version of the standard.)
  526.        Note  that string constants, such as ""5577"", are _n_o_t numeric
  527.        strings,    they are string    constants.  The    idea of     "numeric
  528.        string"    only  applies to fields, ggeettlliinnee input,    FFIILLEENNAAMMEE,
  529.        AARRGGVV elements, EENNVVIIRROONN elements and  the     elements  of  an
  530.        array  created  by  sspplliitt(()) that    are numeric strings.  The
  531.        basic idea is that _u_s_e_r _i_n_p_u_t, and only user  input,  that
  532.        looks numeric, should be    treated    that way.
  533.        Uninitialized  variables     have the numeric value    0 and the
  534.        string value "" (the null, or empty, string).
  535.    OOccttaall aanndd HHeexxaaddeecciimmaall CCoonnssttaannttss
  536.        Starting    with version 3.1 of _g_a_w_k _, you    may  use  C-style
  537.        octal and hexadecimal constants in your AWK program source
  538.        code.  For example, the octal value 001111 is equal    to  deci
  539.        mal  99, and the hexadecimal value 00xx1111 is equal to decimal
  540.        17.
  541.    SSttrriinngg CCoonnssttaannttss
  542.        String  constants  in  AWK  are    sequences  of  characters
  543.        enclosed     between double    quotes ("").  Within strings, cer
  544.        tain _e_s_c_a_p_e _s_e_q_u_e_n_c_e_s are recognized, as    in C.  These are:
  545.        \\\\   A literal backslash.
  546.        \\aa   The     "alert" character; usually the    ASCII BEL charac
  547.         ter.
  548.        \\bb   backspace.
  549.        \\ff   form-feed.
  550.        \\nn   newline.
  551.        \\rr   carriage return.
  552.        \\tt   horizontal tab.
  553.        \\vv   vertical tab.
  554.        \\xx_h_e_x _d_i_g_i_t_s
  555.         The    character represented by the string of    hexadeci
  556.         mal     digits    following the \\xx.  As in ANSI C, all fol
  557.         lowing hexadecimal digits are considered part of  the
  558.         escape  sequence.  (This feature should tell us some
  559.         thing about    language  design  by  committee.)   E.g.,
  560.         ""\\xx11BB"" is the ASCII    ESC (escape) character.
  561.        \\_d_d_d The     character  represented    by the 1-, 2-, or 3-digit
  562.         sequence of    octal digits.  E.g., ""\\003333"" is the  ASCII
  563.         ESC    (escape) character.
  564.        \\_c   The    literal    character _c.
  565.        The escape sequences may    also be    used inside constant reg
  566.        ular expressions    (e.g., //[[ \\tt\\ff\\nn\\rr\\vv]]// matches whitespace
  567.        characters).
  568.        In compatibility    mode, the characters represented by octal
  569.        and hexadecimal escape  sequences  are  treated    literally
  570.        when  used in regular expression    constants.  Thus, //aa\\5522bb//
  571.        is equivalent to    //aa\\**bb//.
  572. PPAATTTTEERRNNSS AANNDD AACCTTIIOONNSS
  573.        AWK is a    line-oriented language.     The pattern comes first,
  574.        and  then the action.  Action statements    are enclosed in    {{
  575.        and }}.  Either the pattern may be missing, or  the  action
  576.        may  be missing,    but, of    course,    not both.  If the pattern
  577.        is missing, the action is executed for every single record
  578.        of input.  A missing action is equivalent to
  579.           {{    pprriinntt }}
  580.        which prints the    entire record.
  581.        Comments     begin with the    "#" character, and continue until
  582.        the end of the line.  Blank lines may be    used to     separate
  583.        statements.   Normally,    a  statement ends with a newline,
  584.        however,    this is    not the    case for lines ending in  a  ",",
  585.        {{,  ??, ::, &&&&, or    ||||.  Lines ending in ddoo    or eellssee    also have
  586.        their statements    automatically continued    on the    following
  587.        line.   In  other cases,    a line can be continued    by ending
  588.        it with a "\", in which case the    newline    will be     ignored.
  589.        Multiple     statements  may be put    on one line by separating
  590.        them with a ";".     This  applies    to  both  the  statements
  591.        within the action part of a pattern-action pair (the usual
  592.        case), and to the pattern-action    statements themselves.
  593.    PPaatttteerrnnss
  594.        AWK patterns may    be one of the following:
  595.           BBEEGGIINN
  596.           EENNDD
  597.           //_r_e_g_u_l_a_r _e_x_p_r_e_s_s_i_o_n//
  598.           _r_e_l_a_t_i_o_n_a_l _e_x_p_r_e_s_s_i_o_n
  599.           _p_a_t_t_e_r_n &&&& _p_a_t_t_e_r_n
  600.           _p_a_t_t_e_r_n |||| _p_a_t_t_e_r_n
  601.           _p_a_t_t_e_r_n ??    _p_a_t_t_e_r_n    :: _p_a_t_t_e_r_n
  602.           ((_p_a_t_t_e_r_n))
  603.           !!    _p_a_t_t_e_r_n
  604.           _p_a_t_t_e_r_n_1,,    _p_a_t_t_e_r_n_2
  605.        BBEEGGIINN and EENNDD are two special kinds of patterns which  are
  606.        not  tested  against  the  input.  The action parts of all
  607.        BBEEGGIINN patterns are merged as if    all  the  statements  had
  608.        been  written  in a single BBEEGGIINN    block.    They are executed
  609.        before any of the input is read.     Similarly, all     the  EENNDD
  610.        blocks  are  merged,  and  executed  when all the input is
  611.        exhausted (or when an eexxiitt statement is executed).   BBEEGGIINN
  612.        and EENNDD patterns    cannot be combined with    other patterns in
  613.        pattern expressions.  BBEEGGIINN and EENNDD patterns  cannot  have
  614.        missing action parts.
  615.        For  //_r_e_g_u_l_a_r  _e_x_p_r_e_s_s_i_o_n// patterns, the    associated state
  616.        ment is executed    for each input record  that  matches  the
  617.        regular    expression.   Regular expressions are the same as
  618.        those in    _e_g_r_e_p(1), and are summarized below.
  619.        A _r_e_l_a_t_i_o_n_a_l _e_x_p_r_e_s_s_i_o_n    may  use  any  of  the    operators
  620.        defined    below in the section on    actions.  These    generally
  621.        test whether certain fields match certain regular  expres
  622.        sions.
  623.        The  &&&&,    ||||, and    !!  operators are logical AND, logical OR,
  624.        and logical NOT,    respectively, as in C.     They  do  short-
  625.        circuit evaluation, also    as in C, and are used for combin
  626.        ing more    primitive pattern expressions.    As in  most  lan
  627.        guages,    parentheses  may  be  used to change the order of
  628.        evaluation.
  629.        The ??:: operator is like the same    operator in  C.      If  the
  630.        first pattern is    true then the pattern used for testing is
  631.        the second pattern, otherwise it    is the third.    Only  one
  632.        of the second and third patterns    is evaluated.
  633.        The  _p_a_t_t_e_r_n_1,,  _p_a_t_t_e_r_n_2    form of    an expression is called    a
  634.        _r_a_n_g_e _p_a_t_t_e_r_n.  It matches all input records starting with
  635.        a  record  that    matches     _p_a_t_t_e_r_n_1, and continuing until    a
  636.        record that matches _p_a_t_t_e_r_n_2, inclusive.     It does not com
  637.        bine with any other sort    of pattern expression.
  638.    RReegguullaarr EExxpprreessssiioonnss
  639.        Regular    expressions are    the extended kind found    in _e_g_r_e_p.
  640.        They are    composed of characters as follows:
  641.        _c      matches the non-metacharacter    _c.
  642.        _\_c      matches the literal character    _c.
  643.        ..      matches any character    _i_n_c_l_u_d_i_n_g newline.
  644.        ^^      matches the beginning    of a string.
  645.        $$      matches the end of a string.
  646.        [[_a_b_c_._._.]]      character list, matches any of  the  characters
  647.           _a_b_c_._._..
  648.        [[^^_a_b_c_._._.]]  negated  character  list, matches any    character
  649.           except _a_b_c_._._..
  650.        _r_1||_r_2      alternation: matches either _r_1 or _r_2.
  651.        _r_1_r_2      concatenation: matches _r_1, and then _r_2.
  652.        _r++      matches one or more _r's.
  653.        _r**      matches zero or more _r's.
  654.        _r??      matches zero or one _r's.
  655.        ((_r))      grouping: matches _r.
  656.        _r{{_n}}
  657.        _r{{_n,,}}
  658.        _r{{_n,,_m}}      One or two  numbers  inside  braces  denote  an
  659.           _i_n_t_e_r_v_a_l _e_x_p_r_e_s_s_i_o_n.    If there is one    number in
  660.           the braces, the preceding regular expression    _r
  661.           is  repeated _n times.     If there are two numbers
  662.           separated by a comma,    _r  is  repeated     _n  to    _m
  663.           times.   If  there  is one number followed by    a
  664.           comma, then _r    is repeated at least _n times.
  665.           Interval  expressions     are  only  available  if
  666.           either ----ppoossiixx or ----rree--iinntteerrvvaall is specified on
  667.           the command line.
  668.  
  669.        \\yy      matches the empty string at either  the  begin
  670.           ning or the end of a word.
  671.  
  672.        \\BB      matches the empty string within a word.
  673.  
  674.        \\<<      matches  the empty string at the beginning of    a
  675.           word.
  676.  
  677.        \\>>      matches the empty string at the end of a  word.
  678.  
  679.        \\ww      matches any word-constituent character (letter,
  680.           digit, or underscore).
  681.  
  682.        \\WW      matches any character     that  is  not    word-con
  683.           stituent.
  684.  
  685.        \\``      matches  the empty string at the beginning of    a
  686.           buffer (string).
  687.  
  688.        \\''      matches the  empty  string  at  the  end  of    a
  689.           buffer.
  690.  
  691.        The  escape  sequences  that are    valid in string    constants
  692.        (see below) are also valid in regular expressions.
  693.  
  694.        _C_h_a_r_a_c_t_e_r _c_l_a_s_s_e_s are a    new  feature  introduced  in  the
  695.        POSIX  standard.      A character class is a special notation
  696.        for describing lists of characters that    have  a     specific
  697.        attribute,  but where the actual    characters themselves can
  698.        vary from country to country and/or from    character set  to
  699.        character  set.     For  example,    the  notion of what is an
  700.        alphabetic character differs in the USA and in France.
  701.  
  702.        A character class is only valid in  a  regular  expression
  703.        _i_n_s_i_d_e  the  brackets  of  a  character    list.    Character
  704.        classes consist of [[::, a    keyword    denoting the  class,  and
  705.        ::]].   The  character classes defined by the POSIX standard
  706.        are:
  707.  
  708.        [[::aallnnuumm::]]  Alphanumeric characters.
  709.  
  710.        [[::aallpphhaa::]]  Alphabetic characters.
  711.  
  712.        [[::bbllaannkk::]]  Space    or tab characters.
  713.  
  714.        [[::ccnnttrrll::]]  Control characters.
  715.  
  716.        [[::ddiiggiitt::]]  Numeric characters.
  717.  
  718.        [[::ggrraapphh::]]  Characters that are both printable and visible.
  719.           (A  space  is    printable, but not visible, while
  720.           an aa is both.)
  721.  
  722.        [[::lloowweerr::]]  Lower-case alphabetic    characters.
  723.  
  724.        [[::pprriinntt::]]  Printable characters (characters that     are  not
  725.           control characters.)
  726.  
  727.        [[::ppuunncctt::]]  Punctuation characters (characters that are not
  728.           letter, digits, control  characters,    or  space
  729.           characters).
  730.  
  731.        [[::ssppaaccee::]]  Space    characters (such as space, tab,    and form
  732.           feed,    to name    a few).
  733.  
  734.        [[::uuppppeerr::]]  Upper-case alphabetic    characters.
  735.  
  736.        [[::xxddiiggiitt::]] Characters that are hexadecimal digits.
  737.  
  738.        For example, before the POSIX standard, to match     alphanu
  739.        meric   characters,   you   would   have      had    to  write
  740.        //[[AA--ZZaa--zz00--99]]//.  If your character set had other alphabetic
  741.        characters  in  it, this    would not match    them, and if your
  742.        character set collated differently from ASCII, this  might
  743.        not  even  match     the ASCII alphanumeric    characters.  With
  744.        the POSIX character classes, you    can write  //[[[[::aallnnuumm::]]]]//,
  745.        and  this matches the alphabetic    and numeric characters in
  746.        your character set.
  747.  
  748.        Two additional special sequences    can appear  in    character
  749.        lists.  These apply to non-ASCII    character sets,    which can
  750.        have single symbols (called _c_o_l_l_a_t_i_n_g _e_l_e_m_e_n_t_s)    that  are
  751.        represented  with more than one character, as well as sev
  752.        eral characters that  are  equivalent  for  _c_o_l_l_a_t_i_n_g,  or
  753.        sorting,     purposes.   (E.g.,  in    French,    a plain    "e" and    a
  754.        grave-accented e` are equivalent.)
  755.  
  756.        Collating Symbols
  757.           A    collating symbol is a  multi-character    collating
  758.           element enclosed in [[..  and ..]].  For example, if cchh
  759.           is a collating element, then [[[[..cchh..]]]]  is    a regular
  760.           expression  that    matches     this  collating element,
  761.           while [[cchh]] is a  regular    expression  that  matches
  762.           either cc or hh.
  763.  
  764.        Equivalence Classes
  765.           An  equivalence class is a locale-specific name for
  766.           a    list of    characters that    are equivalent.     The name
  767.           is  enclosed in [[== and ==]].  For example, the name    ee
  768.           might be used to represent all  of  "e,"    "e,"  and
  769.           "e`."  In this case, [[[[==ee==]]]] is a regular expression
  770.           that matches any of ee,,eeor ee``.
  771.  
  772.        These features are very valuable    in  non-English     speaking
  773.        locales.     The library functions that _g_a_w_k uses for regular
  774.        expression matching currently only recognize POSIX charac
  775.        ter  classes;  they  do not recognize collating symbols or
  776.        equivalence classes.
  777.  
  778.        The \\yy, \\BB, \\<<, \\>>, \\ww, \\WW, \\``, and \\'' operators    are  spe
  779.        cific  to _g_a_w_k; they are    extensions based on facilities in
  780.        the GNU regular expression libraries.
  781.  
  782.        The various command line    options    control    how  _g_a_w_k  inter
  783.        prets characters    in regular expressions.
  784.  
  785.        No options
  786.           In  the  default case, _g_a_w_k provide all the facili
  787.           ties of POSIX regular expressions    and the    GNU regu
  788.           lar expression operators described above.     However,
  789.           interval expressions are not supported.
  790.  
  791.        ----ppoossiixx
  792.           Only POSIX regular expressions are  supported,  the
  793.           GNU operators are    not special.  (E.g., \\ww    matches    a
  794.           literal ww).  Interval expressions    are allowed.
  795.  
  796.        ----ttrraaddiittiioonnaall
  797.           Traditional  Unix     _a_w_k  regular    expressions   are
  798.           matched.    The GNU    operators are not special, inter
  799.           val expressions are not available, and neither  are
  800.           the  POSIX  character  classes  ([[[[::aallnnuumm::]]]] and so
  801.           on).  Characters described by octal and hexadecimal
  802.           escape  sequences     are  treated  literally, even if
  803.           they represent regular expression    metacharacters.
  804.  
  805.        ----rree--iinntteerrvvaall
  806.           Allow interval expressions in regular  expressions,
  807.           even if ----ttrraaddiittiioonnaall has    been provided.
  808.  
  809.    AAccttiioonnss
  810.        Action statements are enclosed in braces, {{ and }}.  Action
  811.        statements consist of the usual    assignment,  conditional,
  812.        and looping statements found in most languages.    The oper
  813.        ators, control  statements,  and     input/output  statements
  814.        available are patterned after those in C.
  815.  
  816.    OOppeerraattoorrss
  817.        The  operators  in AWK, in order    of decreasing precedence,
  818.        are
  819.  
  820.  
  821.        ((...))       Grouping
  822.  
  823.        $$       Field reference.
  824.  
  825.        ++++ ----       Increment and decrement, both prefix    and post
  826.            fix.
  827.  
  828.        ^^       Exponentiation  (****    may also be used, and ****==
  829.            for the assignment operator).
  830.  
  831.        ++ -- !!       Unary plus, unary minus, and    logical    negation.
  832.  
  833.        ** // %%       Multiplication, division, and modulus.
  834.  
  835.        ++ --       Addition and    subtraction.
  836.  
  837.        _s_p_a_c_e       String concatenation.
  838.  
  839.        << >>
  840.        <<== >>==
  841.        !!== ====       The regular relational operators.
  842.  
  843.        ~~ !!~~       Regular   expression      match,  negated  match.
  844.            NNOOTTEE:: Do not    use a constant regular expression
  845.            (//ffoooo//)  on    the  left-hand side of a ~~ or !!~~.
  846.            Only    use one     on  the  right-hand  side.   The
  847.            expression //ffoooo// ~~ _e_x_p has the same meaning as
  848.            (((($$00    ~~ //ffoooo//)) ~~ _e_x_p)).   This     is  usually  _n_o_t
  849.            what    was intended.
  850.  
  851.        iinn       Array membership.
  852.  
  853.        &&&&       Logical AND.
  854.  
  855.        ||||       Logical OR.
  856.  
  857.        ??::       The    C  conditional    expression.  This has the
  858.            form    _e_x_p_r_1 ??    _e_x_p_r_2 ::    _e_x_p_r_3.    If _e_x_p_r_1 is true,
  859.            the    value  of the expression is _e_x_p_r_2, other
  860.            wise    it is _e_x_p_r_3.  Only one of _e_x_p_r_2    and _e_x_p_r_3
  861.            is evaluated.
  862.  
  863.        == ++== --==
  864.        **== //== %%==    ^^== Assignment.     Both  absolute    assignment ((_v_a_r    ==
  865.            _v_a_l_u_e))  and    operator-assignment  (the   other
  866.            forms) are supported.
  867.  
  868.    CCoonnttrrooll SSttaatteemmeennttss
  869.        The control statements are as follows:
  870.  
  871.           iiff ((_c_o_n_d_i_t_i_o_n)) _s_t_a_t_e_m_e_n_t [ eellssee _s_t_a_t_e_m_e_n_t    ]
  872.           wwhhiillee ((_c_o_n_d_i_t_i_o_n))    _s_t_a_t_e_m_e_n_t
  873.           ddoo _s_t_a_t_e_m_e_n_t wwhhiillee ((_c_o_n_d_i_t_i_o_n))
  874.           ffoorr ((_e_x_p_r_1;; _e_x_p_r_2;; _e_x_p_r_3))    _s_t_a_t_e_m_e_n_t
  875.           ffoorr ((_v_a_r iinn _a_r_r_a_y)) _s_t_a_t_e_m_e_n_t
  876.           bbrreeaakk
  877.           ccoonnttiinnuuee
  878.           ddeelleettee _a_r_r_a_y[[_i_n_d_e_x]]
  879.           ddeelleettee _a_r_r_a_y
  880.           eexxiitt [ _e_x_p_r_e_s_s_i_o_n    ]
  881.           {{    _s_t_a_t_e_m_e_n_t_s }}
  882.  
  883.    II//OO SSttaatteemmeennttss
  884.        The input/output    statements are as follows:
  885.  
  886.  
  887.        cclloossee((_f_i_l_e [,, _h_o_w]))   Close file, pipe or co-process.  The
  888.                  optional _h_o_w  should  only     be  used
  889.                  when  closing  one     end of    a two-way
  890.                  pipe to a co-process.  It must be    a
  891.                  string value, either ""ttoo"" or ""ffrroomm"".
  892.  
  893.        ggeettlliinnee             Set $$00 from next input  record;  set
  894.                  NNFF, NNRR, FFNNRR.
  895.  
  896.        ggeettlliinnee <<_f_i_l_e         Set $$00 from next record of    _f_i_l_e; set
  897.                  NNFF.
  898.  
  899.        ggeettlliinnee _v_a_r         Set _v_a_r from next input record;  set
  900.                  NNRR, FFNNRR.
  901.  
  902.        ggeettlliinnee _v_a_r <<_f_i_l_e     Set _v_a_r from next record of _f_i_l_e.
  903.  
  904.        _c_o_m_m_a_n_d || ggeettlliinnee [_v_a_r]
  905.                  Run _c_o_m_m_a_n_d piping    the output either
  906.                  into $$00 or    _v_a_r, as    above.
  907.  
  908.        _c_o_m_m_a_n_d ||&& ggeettlliinnee [_v_a_r]
  909.                  Run _c_o_m_m_a_n_d as a  co-process  piping
  910.                  the output    either into $$00 or _v_a_r, as
  911.                  above.   Co-processes  are     a   _g_a_w_k
  912.                  extension.
  913.  
  914.        nneexxtt             Stop  processing  the  current input
  915.                  record.  The next    input  record  is
  916.                  read and processing starts    over with
  917.                  the first pattern in  the    AWK  pro
  918.                  gram.   If    the end    of the input data
  919.                  is    reached,  the  EENNDD  block(s),  if
  920.                  any, are executed.
  921.  
  922.        nneexxttffiillee             Stop  processing  the  current input
  923.                  file.  The    next  input  record  read
  924.                  comes  from  the  next  input  file.
  925.                  FFIILLEENNAAMMEE and AARRGGIINNDD are updated, FFNNRR
  926.                  is    reset to 1, and    processing starts
  927.                  over with the first pattern  in  the
  928.                  AWK program. If the end of    the input
  929.                  data is reached, the  EENNDD    block(s),
  930.                  if    any, are executed.
  931.  
  932.        pprriinntt             Prints the    current    record.     The out
  933.                  put record    is  terminated    with  the
  934.                  value of the OORRSS variable.
  935.  
  936.        pprriinntt _e_x_p_r_-_l_i_s_t         Prints expressions.  Each expression
  937.                  is    separated by the value of the OOFFSS
  938.                  variable.    The output record is ter
  939.                  minated with the value  of     the  OORRSS
  940.                  variable.
  941.  
  942.        pprriinntt _e_x_p_r_-_l_i_s_t >>_f_i_l_e Prints  expressions  on  _f_i_l_e.  Each
  943.                  expression    is separated by    the value
  944.                  of     the  OOFFSS  variable.   The output
  945.                  record is terminated with the  value
  946.                  of    the OORRSS    variable.
  947.  
  948.        pprriinnttff _f_m_t_, _e_x_p_r_-_l_i_s_t Format and    print.
  949.  
  950.        pprriinnttff _f_m_t_, _e_x_p_r_-_l_i_s_t >>_f_i_l_e
  951.                  Format and    print on _f_i_l_e.
  952.  
  953.        ssyysstteemm((_c_m_d_-_l_i_n_e))         Execute  the  command  _c_m_d_-_l_i_n_e, and
  954.                  return the    exit status.   (This  may
  955.                  not  be  available    on non-POSIX sys
  956.                  tems.)
  957.  
  958.        fffflluusshh(([_f_i_l_e]))         Flush any    buffers     associated  with
  959.                  the  open    output file or pipe _f_i_l_e.
  960.                  If    _f_i_l_e is     missing,  then     standard
  961.                  output  is     flushed.  If _f_i_l_e is the
  962.                  null string, then    all  open  output
  963.                  files  and     pipes have their buffers
  964.                  flushed.
  965.  
  966.        Additional output redirections are allowed for  pprriinntt  and
  967.        pprriinnttff.
  968.  
  969.        pprriinntt ...... >>>> _f_i_l_e
  970.           appends output to    the _f_i_l_e.
  971.  
  972.        pprriinntt ...... || _c_o_m_m_a_n_d
  973.           writes on    a pipe.
  974.  
  975.        pprriinntt ...... ||&& _c_o_m_m_a_n_d
  976.           sends data to a co-process.
  977.  
  978.        The  ggeettlliinnee command returns 0 on end of    file and -1 on an
  979.        error.  Upon an error, EERRRRNNOO contains a string  describing
  980.        the problem.
  981.  
  982.        NNOOTTEE::  If  using     a pipe    or co-process to ggeettlliinnee, or from
  983.        pprriinntt or    pprriinnttff within a    loop, you  _m_u_s_t     use  cclloossee(())  to
  984.        create  new  instances of the command.  AWK does    not auto
  985.        matically close pipes or     co-processes  when  they  return
  986.        EOF.
  987.  
  988.    TThhee _p_r_i_n_t_f SSttaatteemmeenntt
  989.        The  AWK     versions  of  the pprriinnttff statement and    sspprriinnttff(())
  990.        function     (see  below)  accept  the  following  conversion
  991.        specification formats:
  992.  
  993.        %%cc      An  ASCII  character.  If the argument used for %%cc
  994.            is numeric, it  is  treated  as    a  character  and
  995.            printed.     Otherwise, the    argument is assumed to be
  996.            a string, and the only  first  character     of  that
  997.            string is printed.
  998.  
  999.        %%dd, %%ii  A decimal number    (the integer part).
  1000.  
  1001.        %%ee ,,  %%EE
  1002.            A    floating    point     number      of   the   form
  1003.            [[--]]dd..ddddddddddddee[[++--]]dddd.  The    %%EE format uses EE  instead
  1004.            of ee.
  1005.  
  1006.        %%ff      A floating point    number of the form [[--]]dddddd..dddddddddddd.
  1007.  
  1008.        %%gg ,,  %%GG
  1009.            Use %%ee or %%ff  conversion,  whichever  is     shorter,
  1010.            with nonsignificant zeros suppressed.  The %%GG for
  1011.            mat uses    %%EE instead of %%ee.
  1012.  
  1013.        %%oo      An unsigned octal number    (also an integer).
  1014.  
  1015.        %%uu      An unsigned decimal number (again, an integer).
  1016.  
  1017.        %%ss      A character string.
  1018.  
  1019.        %%xx ,,  %%XX
  1020.            An unsigned hexadecimal number (an integer).   The
  1021.            %%XX format uses AABBCCDDEEFF instead of    aabbccddeeff.
  1022.  
  1023.        %%%%      A single    %% character; no    argument is converted.
  1024.  
  1025.        Optional,  additional parameters    may lie    between    the %% and
  1026.        the control letter:
  1027.  
  1028.        _c_o_u_n_t$$ Use the _c_o_u_n_t'th argument    at this    point in the for
  1029.           matting.    This is    called a _p_o_s_i_t_i_o_n_a_l _s_p_e_c_i_f_i_e_r and
  1030.           is intended primarily for    use  in     translated  ver
  1031.           sions  of     format    strings, not in    the original text
  1032.           of an AWK    program.  It is    a _g_a_w_k extension.
  1033.  
  1034.        --      The expression should be left-justified within  its
  1035.           field.
  1036.  
  1037.        _s_p_a_c_e  For  numeric  conversions,  prefix  positive values
  1038.           with a space, and     negative  values  with     a  minus
  1039.           sign.
  1040.  
  1041.        ++      The  plus    sign, used before the width modifier (see
  1042.           below), says to always supply a  sign  for  numeric
  1043.           conversions,  even  if  the data to be formatted is
  1044.           positive.     The ++ overrides the space modifier.
  1045.  
  1046.        ##      Use an "alternate    form" for  certain  control  let
  1047.           ters.   For %%oo, supply a leading zero.  For %%xx, and
  1048.           %%XX, supply a leading 00xx or 00XX for    a nonzero result.
  1049.           For  %%ee,    %%EE,  and %%ff, the result    always contains    a
  1050.           decimal point.  For %%gg, and %%GG, trailing zeros  are
  1051.           not removed from the result.
  1052.  
  1053.        00      A     leading  00 (zero) acts    as a flag, that    indicates
  1054.           output should be    padded    with  zeroes  instead  of
  1055.           spaces.    This  applies  even to non-numeric output
  1056.           formats.    This flag only has  an    effect    when  the
  1057.           field  width is wider than the value to be printed.
  1058.  
  1059.        _w_i_d_t_h  The field    should be  padded  to  this  width.   The
  1060.           field  is     normally  padded  with    spaces.     If the    00
  1061.           flag has been used, it is    padded with zeroes.
  1062.  
  1063.        .._p_r_e_c  A    number that specifies the precision to    use  when
  1064.           printing.      For  the  %%ee,     %%EE, and %%ff formats, this
  1065.           specifies    the number of digits you want printed  to
  1066.           the right    of the decimal point.  For the %%gg, and %%GG
  1067.           formats, it specifies the    maximum    number of signif
  1068.           icant  digits.   For the %%dd, %%oo, %%ii, %%uu, %%xx, and %%XX
  1069.           formats, it specifies the    minimum    number of  digits
  1070.           to  print.  For %%ss, it specifies the maximum number
  1071.           of  characters  from  the     string     that  should  be
  1072.           printed.
  1073.  
  1074.        The  dynamic  _w_i_d_t_h  and     _p_r_e_c  capabilities of the ANSI    C
  1075.        pprriinnttff(())    routines are supported.     A ** in    place  of  either
  1076.        the wwiiddtthh or pprreecc specifications    causes their values to be
  1077.        taken from the argument list to pprriinnttff or  sspprriinnttff(()).   To
  1078.        use  a positional specifier with    a dynamic width    or preci
  1079.        sion, supply the    _c_o_u_n_t$$ after the ** in the format  string.
  1080.        For example, ""%%33$$**22$$..**11$$ss"".
  1081.  
  1082.    SSppeecciiaall FFiillee    NNaammeess
  1083.        When  doing  I/O     redirection  from either pprriinntt    or pprriinnttff
  1084.        into a file, or via ggeettlliinnee from    a file,     _g_a_w_k  recognizes
  1085.        certain    special     filenames  internally.      These    filenames
  1086.        allow access  to     open  file  descriptors  inherited  from
  1087.        _g_a_w_k's  parent  process    (usually  the shell).  These file
  1088.        names may also be used on the command line  to  name  data
  1089.        files.  The filenames are:
  1090.  
  1091.        //ddeevv//ssttddiinn  The standard    input.
  1092.  
  1093.        //ddeevv//ssttddoouutt The standard    output.
  1094.  
  1095.        //ddeevv//ssttddeerrrr The standard    error output.
  1096.  
  1097.        //ddeevv//ffdd//_n   The     file    associated  with  the  open  file
  1098.            descriptor _n.
  1099.  
  1100.        These are particularly useful  for  error  messages.   For
  1101.        example:
  1102.  
  1103.           pprriinntt ""YYoouu bblleeww iitt!!"" >> ""//ddeevv//ssttddeerrrr""
  1104.  
  1105.        whereas you would otherwise have    to use
  1106.  
  1107.           pprriinntt ""YYoouu bblleeww iitt!!"" || ""ccaatt 11>>&&22""
  1108.  
  1109.        The  following  special    filenames may be used with the ||&&
  1110.        co-process operator for creating     TCP/IP     network  connec
  1111.        tions.
  1112.  
  1113.        //iinneett//ttccpp//_l_p_o_r_t//_r_h_o_s_t//_r_p_o_r_t  File for TCP/IP connection on
  1114.                     local port    _l_p_o_r_t  to  remote
  1115.                     host  _r_h_o_s_t     on  remote  port
  1116.                     _r_p_o_r_t.  Use    a port    of  00  to
  1117.                     have  the system pick a port.
  1118.  
  1119.        //iinneett//uuddpp//_l_p_o_r_t//_r_h_o_s_t//_r_p_o_r_t  Similar,   but   use   UDP/IP
  1120.                     instead of TCP/IP.
  1121.  
  1122.        //iinneett//rraaww//_l_p_o_r_t//_r_h_o_s_t//_r_p_o_r_t  Reserved for future    use.
  1123.  
  1124.        Other  special  filenames  provide  access  to information
  1125.        about the running _g_a_w_k process.    TThheessee ffiilleennaammeess     aarree  nnooww
  1126.        oobbssoolleettee..   Use    the PPRROOCCIINNFFOO array to obtain the informa
  1127.        tion they provide.  The filenames are:
  1128.  
  1129.        //ddeevv//ppiidd       Reading this    file returns the  process  ID  of
  1130.            the    current     process,  in decimal, terminated
  1131.            with    a newline.
  1132.  
  1133.        //ddeevv//ppppiidd   Reading this    file returns the  parent  process
  1134.            ID  of the current process, in decimal, termi
  1135.            nated with a    newline.
  1136.  
  1137.        //ddeevv//ppggrrppiidd Reading this    file returns the process group ID
  1138.            of the current process, in decimal, terminated
  1139.            with    a newline.
  1140.  
  1141.        //ddeevv//uusseerr   Reading this    file returns a single record ter
  1142.            minated  with a newline.  The fields    are sepa
  1143.            rated with spaces.  $$11 is  the  value  of  the
  1144.            _g_e_t_u_i_d(2)  system call, $$22 is the value of the
  1145.            _g_e_t_e_u_i_d(2) system call, $$33 is the value of the
  1146.            _g_e_t_g_i_d(2)  system call, and $$44 is the value of
  1147.            the _g_e_t_e_g_i_d(2) system call.    If there are  any
  1148.            additional  fields,    they  are  the    group IDs
  1149.            returned by _g_e_t_g_r_o_u_p_s(2).  Multiple groups may
  1150.            not be supported on all systems.
  1151.  
  1152.    NNuummeerriicc FFuunnccttiioonnss
  1153.        AWK has the following built-in arithmetic functions:
  1154.  
  1155.  
  1156.        aattaann22((_y,,    _x))   Returns the arctangent of _y_/_x in radians.
  1157.  
  1158.        ccooss((_e_x_p_r))     Returns  the  cosine  of  _e_x_p_r,  which is in
  1159.              radians.
  1160.  
  1161.        eexxpp((_e_x_p_r))     The exponential function.
  1162.  
  1163.        iinntt((_e_x_p_r))     Truncates to integer.
  1164.  
  1165.        lloogg((_e_x_p_r))     The natural logarithm function.
  1166.  
  1167.        rraanndd(())         Returns a random number between 0 and 1.
  1168.  
  1169.        ssiinn((_e_x_p_r))     Returns the sine of _e_x_p_r, which is    in  radi
  1170.              ans.
  1171.  
  1172.        ssqqrrtt((_e_x_p_r))    The square    root function.
  1173.  
  1174.        ssrraanndd(([_e_x_p_r])) Uses  _e_x_p_r    as a new seed for the random num
  1175.              ber generator.  If    no _e_x_p_r    is provided,  the
  1176.              time  of  day  is used.  The return value is
  1177.              the previous seed for the random number gen
  1178.              erator.
  1179.  
  1180.    SSttrriinngg FFuunnccttiioonnss
  1181.        _G_a_w_k has    the following built-in string functions:
  1182.  
  1183.  
  1184.        aassoorrtt((_s [,, _d]))           Returns    the number of elements in
  1185.                    the source array    _s.  The     contents
  1186.                    of  _s are sorted    using _g_a_w_k's nor
  1187.                    mal rules  for  comparing  values,
  1188.                    and  the     indexes  of  the  sorted
  1189.                    values  of  _s  are  replaced  with
  1190.                    sequential  integers starting with
  1191.                    1.  If  the  optional  destination
  1192.                    array  _d     is  specified,    then _s is
  1193.                    first duplicated    into _d,    and  then
  1194.                    _d  is  sorted, leaving the indexes
  1195.                    of the source array _s unchanged.
  1196.  
  1197.        ggeennssuubb((_r,, _s,, _h [,, _t]))   Search the  target  string  _t  for
  1198.                    matches    of the regular expression
  1199.                    _r.  If _h     is  a    string    beginning
  1200.                    with  gg    or  GG,    then  replace all
  1201.                    matches of _r with _s.  Otherwise,    _h
  1202.                    is a number indicating which match
  1203.                    of _r to replace.     If _t is not sup
  1204.                    plied, $$00 is used instead.  Within
  1205.                    the  replacement      text     _s,   the
  1206.                    sequence     \\_n,  where  _n is a digit
  1207.                    from 1 to 9, may    be used    to  indi
  1208.                    cate  just  the    text that matched
  1209.                    the _n'th    parenthesized  subexpres
  1210.                    sion.   The sequence \\00 represents
  1211.                    the entire matched text,     as  does
  1212.                    the character &&.     Unlike    ssuubb(()) and
  1213.                    ggssuubb(()),    the  modified  string  is
  1214.                    returned     as  the  result  of  the
  1215.                    function, and the original  target
  1216.                    string is _n_o_t changed.
  1217.  
  1218.        ggssuubb((_r,, _s [,, _t]))           For  each  substring  matching the
  1219.                    regular expression _r in the string
  1220.                    _t,  substitute  the  string _s, and
  1221.                    return  the  number  of    substitu
  1222.                    tions.    If _t is    not supplied, use
  1223.                    $$00.  An && in the    replacement  text
  1224.                    is replaced with    the text that was
  1225.                    actually    matched.  Use \\&& to get    a
  1226.                    literal &&.  (This must be typed as
  1227.                    ""\\\\&&"";  see  _G_A_W_K_:  _E_f_f_e_c_t_i_v_e  _A_W_K
  1228.                    _P_r_o_g_r_a_m_m_i_n_g  for     a fuller discus
  1229.                    sion of    the  rules  for     &&''ss  and
  1230.                    backslashes   in     the  replacement
  1231.                    text of ssuubb(()),  ggssuubb(()),    and  ggeenn
  1232.                    ssuubb(()).)
  1233.  
  1234.        iinnddeexx((_s,,    _t))           Returns    the index of the string    _t
  1235.                    in the string _s,    or 0 if    _t is  not
  1236.                    present.     (This implies that char
  1237.                    acter indices start at one.)
  1238.  
  1239.        lleennggtthh(([_s]))           Returns the length of  the  string
  1240.                    _s, or the length    of $$00 if _s is not
  1241.                    supplied.
  1242.  
  1243.        mmaattcchh((_s,,    _r [,, _a]))       Returns the position  in     _s  where
  1244.                    the  regular  expression    _r occurs,
  1245.                    or 0 if _r is not    present, and sets
  1246.                    the  values of RRSSTTAARRTT and RRLLEENNGGTTHH.
  1247.                    Note that the  argument    order  is
  1248.                    the  same  as  for the ~~    operator:
  1249.                    _s_t_r ~~ _r_e.  If array _a is    provided,
  1250.                    _a  is  cleared and then elements    1
  1251.                    through _n are filled with the por
  1252.                    tions  of  _s that match the corre
  1253.                    sponding    parenthesized  subexpres
  1254.                    sion  in    _r.  The    0'th element of    _a
  1255.                    contains    the portion of _s  matched
  1256.                    by  the    entire regular expression
  1257.                    _r.
  1258.  
  1259.        sspplliitt((_s,,    _a [,, _r]))       Splits the string _s into    the array
  1260.                    _a on the    regular    expression _r, and
  1261.                    returns the number of fields.   If
  1262.                    _r  is omitted, FFSS is used instead.
  1263.                    The  array  _a  is  cleared  first.
  1264.                    Splitting  behaves  identically to
  1265.                    field splitting,    described  above.
  1266.  
  1267.        sspprriinnttff((_f_m_t,, _e_x_p_r_-_l_i_s_t)) Prints _e_x_p_r_-_l_i_s_t    according to _f_m_t,
  1268.                    and returns the resulting  string.
  1269.  
  1270.        ssttrrttoonnuumm((_s_t_r))           Examines      _s_t_r,    and  returns  its
  1271.                    numeric value.  If _s_t_r begins with
  1272.                    a  leading  00,  ssttrrttoonnuumm(()) assumes
  1273.                    that _s_t_r    is an octal  number.   If
  1274.                    _s_t_r  begins  with  a leading 00xx or
  1275.                    00XX, ssttrrttoonnuumm(()) assumes that _s_t_r is
  1276.                    a hexadecimal number.
  1277.  
  1278.        ssuubb((_r,, _s    [,, _t]))           Just  like  ggssuubb(()),  but     only the
  1279.                    first   matching      substring    is
  1280.                    replaced.
  1281.  
  1282.        ssuubbssttrr((_s,, _i [,, _n]))      Returns    the  at     most _n-character
  1283.                    substring of _s starting at _i.   If
  1284.                    _n  is  omitted,    the  rest of _s is
  1285.                    used.
  1286.  
  1287.        ttoolloowweerr((_s_t_r))           Returns a copy of the string  _s_t_r,
  1288.                    with all    the upper-case characters
  1289.                    in _s_t_r translated to their  corre
  1290.                    sponding     lower-case counterparts.
  1291.                    Non-alphabetic characters are left
  1292.                    unchanged.
  1293.  
  1294.        ttoouuppppeerr((_s_t_r))           Returns    a copy of the string _s_t_r,
  1295.                    with all    the lower-case characters
  1296.                    in  _s_t_r translated to their corre
  1297.                    sponding    upper-case  counterparts.
  1298.                    Non-alphabetic characters are left
  1299.                    unchanged.
  1300.  
  1301.    TTiimmee    FFuunnccttiioonnss
  1302.        Since one of the    primary    uses of    AWK programs is     process
  1303.        ing  log     files    that contain time stamp    information, _g_a_w_k
  1304.        provides    the following functions    for obtaining time stamps
  1305.        and formatting them.
  1306.  
  1307.  
  1308.        mmkkttiimmee((_d_a_t_e_s_p_e_c))
  1309.          Rurns    _d_a_t_e_s_p_e_c  into    a  time    stamp of the same
  1310.          form as returned by ssyyssttiimmee(()).     The _d_a_t_e_s_p_e_c  is
  1311.          a  string of the form _Y_Y_Y_Y _M_M _D_D _H_H _M_M    _S_S_[ _D_S_T_].
  1312.          The contents of the string are    six or seven num
  1313.          bers  representing  respectively  the    full year
  1314.          including century, the    month from 1 to     12,  the
  1315.          day  of  the month from 1 to 31, the hour of the
  1316.          day from 0 to 23, the minute from 0 to     59,  and
  1317.          the  second  from  0 to 60, and an optional day
  1318.          light saving flag.  The values    of these  numbers
  1319.          need  not  be    within    the ranges specified; for
  1320.          example, an hour  of  -1  means  1  hour  before
  1321.          midnight.  The    origin-zero Gregorian calendar is
  1322.          assumed, with year 0 preceding    year 1    and  year
  1323.          -1  preceding year 0.    The time is assumed to be
  1324.          in the    local timezone.     If the     daylight  saving
  1325.          flag is positive, the time is assumed to be day
  1326.          light saving time; if zero, the time is  assumed
  1327.          to  be     standard  time;  and  if  negative  (the
  1328.          default), mmkkttiimmee(()) attempts to    determine whether
  1329.          daylight saving time is in effect for the speci
  1330.          fied time.  If    _d_a_t_e_s_p_e_c does not contain  enough
  1331.          elements  or  if  the    resulting  time    is out of
  1332.          range,    mmkkttiimmee(()) returns -1.
  1333.  
  1334.        ssttrrffttiimmee(([_f_o_r_m_a_t    [,, _t_i_m_e_s_t_a_m_p]]))
  1335.          Formats _t_i_m_e_s_t_a_m_p according to    the specification
  1336.          in  _f_o_r_m_a_t_.  The _t_i_m_e_s_t_a_m_p should be of the same
  1337.          form as returned by ssyyssttiimmee(()).     If _t_i_m_e_s_t_a_m_p  is
  1338.          missing,  the    current     time of day is    used.  If
  1339.          _f_o_r_m_a_t    is missing, a default  format  equivalent
  1340.          to the    output of _d_a_t_e(1) is used.  See    the spec
  1341.          ification for the ssttrrffttiimmee(()) function in ANSI    C
  1342.          for  the  format conversions that are guaranteed
  1343.          to be available.   A  public-domain  version  of
  1344.          _s_t_r_f_t_i_m_e(3)  and  a  man  page     for it    come with
  1345.          _g_a_w_k; if that version was used     to  build  _g_a_w_k,
  1346.          then  all  of    the conversions    described in that
  1347.          man page are available    to _g_a_w_k_.
  1348.  
  1349.        ssyyssttiimmee(()) Returns the current time of day as the    number of
  1350.          seconds since the Epoch (1970-01-01 00:00:00 UTC
  1351.          on POSIX systems).
  1352.  
  1353.    BBiitt MMaanniippuullaattiioonnss FFuunnccttiioonnss
  1354.        Starting    with version  3.1  of  _g_a_w_k,  the  following  bit
  1355.        manipulation  functions    are available.    They work by con
  1356.        verting double-precision    floating point values to uunnssiiggnneedd
  1357.        lloonngg  integers,    doing  the operation, and then converting
  1358.        the result back to floating point.  The functions are:
  1359.  
  1360.        aanndd((_v_1,, _v_2))       Return the bitwise AND of  the  values
  1361.                provided by _v_1 and _v_2.
  1362.  
  1363.        ccoommppll((_v_a_l))       Return  the bitwise complement of _v_a_l.
  1364.  
  1365.        llsshhiifftt((_v_a_l,, _c_o_u_n_t))  Return the value of _v_a_l, shifted  left
  1366.                by _c_o_u_n_t bits.
  1367.  
  1368.        oorr((_v_1,, _v_2))       Return  the    bitwise     OR of the values
  1369.                provided by _v_1 and _v_2.
  1370.  
  1371.        rrsshhiifftt((_v_a_l,, _c_o_u_n_t))  Return the value of _v_a_l, shifted right
  1372.                by _c_o_u_n_t bits.
  1373.  
  1374.        xxoorr((_v_1,, _v_2))       Return  the    bitwise    XOR of the values
  1375.                provided by _v_1 and _v_2.
  1376.  
  1377.  
  1378.    IInntteerrnnaattiioonnaalliizzaattiioonn    FFuunnccttiioonnss
  1379.        Starting    with version 3.1 of _g_a_w_k, the following    functions
  1380.        may  be    used from within your AWK program for translating
  1381.        strings at run-time.  For full details, see  _G_A_W_K_:  _E_f_f_e_c_
  1382.        _t_i_v_e _A_W_K    _P_r_o_g_r_a_m_m_i_n_g.
  1383.  
  1384.        bbiinnddtteexxttddoommaaiinn((_d_i_r_e_c_t_o_r_y    [,, _d_o_m_a_i_n]))
  1385.           Specifies     the  directory     where _g_a_w_k looks for the
  1386.           ..mmoo files, in case  they    will  not  or  cannot  be
  1387.           placed  in the ``standard'' locations (e.g., during
  1388.           testing).     It returns the    directory where    _d_o_m_a_i_n is
  1389.           ``bound.''
  1390.           The  default _d_o_m_a_i_n is the value of TTEEXXTTDDOOMMAAIINN.  If
  1391.           _d_i_r_e_c_t_o_r_y    is the null string (""""), then bbiinnddtteexxttddoo
  1392.           mmaaiinn(())  returns  the  current binding for    the given
  1393.           _d_o_m_a_i_n.
  1394.  
  1395.        ddccggeetttteexxtt((_s_t_r_i_n_g    [,, _d_o_m_a_i_n [,, _c_a_t_e_g_o_r_y]]))
  1396.           Returns the translation of _s_t_r_i_n_g     in  text  domain
  1397.           _d_o_m_a_i_n  for  locale category _c_a_t_e_g_o_r_y.  The default
  1398.           value for    _d_o_m_a_i_n is the current  value  of  TTEEXXTTDDOO
  1399.           MMAAIINN.   The  default value for _c_a_t_e_g_o_r_y is ""LLCC__MMEESS
  1400.           SSAAGGEESS"".
  1401.           If you supply a value for    _c_a_t_e_g_o_r_y, it  must  be    a
  1402.           string  equal to one of the known    locale categories
  1403.           described    in _G_A_W_K_: _E_f_f_e_c_t_i_v_e _A_W_K _P_r_o_g_r_a_m_m_i_n_g.   You
  1404.           must  also supply    a text domain.    Use TTEEXXTTDDOOMMAAIINN if
  1405.           you want to use the current domain.
  1406.  
  1407.        ddccnnggeetttteexxtt((_s_t_r_i_n_g_1 , _s_t_r_i_n_g_2 , _n_u_m_b_e_r [,,    _d_o_m_a_i_n    [,,  _c_a_t_e_
  1408.        _g_o_r_y]]))
  1409.           Returns the plural form  used  for  _n_u_m_b_e_r  of  the
  1410.           translation  of  _s_t_r_i_n_g_1 and _s_t_r_i_n_g_2 in text domain
  1411.           _d_o_m_a_i_n for locale    category _c_a_t_e_g_o_r_y.   The  default
  1412.           value  for  _d_o_m_a_i_n  is the current value of TTEEXXTTDDOO
  1413.           MMAAIINN.  The default value for _c_a_t_e_g_o_r_y  is     ""LLCC__MMEESS
  1414.           SSAAGGEESS"".
  1415.           If  you  supply  a value for _c_a_t_e_g_o_r_y, it    must be    a
  1416.           string equal to one of the known locale  categories
  1417.           described     in _G_A_W_K_: _E_f_f_e_c_t_i_v_e _A_W_K    _P_r_o_g_r_a_m_m_i_n_g.  You
  1418.           must also    supply a text domain.  Use TTEEXXTTDDOOMMAAIINN  if
  1419.           you want to use the current domain.
  1420.  
  1421. UUSSEERR--DDEEFFIINNEEDD FFUUNNCCTTIIOONNSS
  1422.        Functions in AWK    are defined as follows:
  1423.  
  1424.           ffuunnccttiioonn _n_a_m_e((_p_a_r_a_m_e_t_e_r _l_i_s_t)) {{ _s_t_a_t_e_m_e_n_t_s }}
  1425.  
  1426.        Functions  are  executed     when they are called from within
  1427.        expressions in either patterns or actions.  Actual parame
  1428.        ters supplied in    the function call are used to instantiate
  1429.        the formal parameters declared in  the  function.   Arrays
  1430.        are  passed  by    reference,  other variables are    passed by
  1431.        value.
  1432.  
  1433.        Since functions were not    originally part    of the    AWK  lan
  1434.        guage, the provision for    local variables    is rather clumsy:
  1435.        They are    declared as extra  parameters  in  the    parameter
  1436.        list.   The convention is to separate local variables from
  1437.        real parameters by extra    spaces    in  the     parameter  list.
  1438.        For example:
  1439.  
  1440.           ffuunnccttiioonn    ff((pp,, qq,,        aa,, bb))   ## aa    aanndd bb aarree llooccaall
  1441.           {{
  1442.            ......
  1443.           }}
  1444.  
  1445.           //aabbcc//    {{ ...... ;;    ff((11,, 22))    ;; ...... }}
  1446.  
  1447.        The  left  parenthesis  in  a function call is required to
  1448.        immediately follow the function name, without  any  inter
  1449.        vening  white space.  This is to    avoid a    syntactic ambigu
  1450.        ity with    the  concatenation  operator.    This  restriction
  1451.        does not    apply to the built-in functions    listed above.
  1452.  
  1453.        Functions may call each other and may be    recursive.  Func
  1454.        tion parameters used as local variables are initialized to
  1455.        the  null string    and the    number zero upon function invoca
  1456.        tion.
  1457.  
  1458.        Use rreettuurrnn _e_x_p_r to return a value from  a  function.   The
  1459.        return  value  is undefined if no value is provided, or if
  1460.        the function returns by "falling    off" the end.
  1461.  
  1462.        If ----lliinntt has been provided, _g_a_w_k  warns     about    calls  to
  1463.        undefined functions at parse time, instead of at    run time.
  1464.        Calling an undefined function  at  run  time  is     a  fatal
  1465.        error.
  1466.  
  1467.        The word    ffuunncc may be used in place of ffuunnccttiioonn.
  1468.  
  1469. DDYYNNAAMMIICCAALLLLYY LLOOAADDIINNGG NNEEWW    FFUUNNCCTTIIOONNSS
  1470.        Beginning  with    version     3.1 of    _g_a_w_k, you can dynamically
  1471.        add new built-in    functions  to  the  running  _g_a_w_k  inter
  1472.        preter.     The  full  details  are beyond    the scope of this
  1473.        manual page; see    _G_A_W_K_: _E_f_f_e_c_t_i_v_e    _A_W_K _P_r_o_g_r_a_m_m_i_n_g     for  the
  1474.        details.
  1475.  
  1476.  
  1477.        eexxtteennssiioonn((_o_b_j_e_c_t,, _f_u_n_c_t_i_o_n))
  1478.            Dynamically  link  the shared object file named by
  1479.            _o_b_j_e_c_t, and invoke _f_u_n_c_t_i_o_n  in    that  object,  to
  1480.            perform initialization.    These should both be pro
  1481.            vided as    strings.  Returns the value  returned  by
  1482.            _f_u_n_c_t_i_o_n.
  1483.  
  1484.        TThhiiss  ffuunnccttiioonn  iiss pprroovviiddeedd aanndd ddooccuummeenntteedd iinn _G_A_W_K_: _E_f_f_e_c_
  1485.        _t_i_v_e _A_W_K    _P_r_o_g_r_a_m_m_i_n_g,, bbuutt eevveerryytthhiinngg aabboouutt tthhiiss ffeeaattuurree iiss
  1486.        lliikkeellyy  ttoo cchhaannggee iinn tthhee    nneexxtt rreelleeaassee..  WWee SSTTRROONNGGLLYY rreeccoomm
  1487.        mmeenndd tthhaatt yyoouu ddoo    nnoott uussee    tthhiiss ffeeaattuurree  ffoorr  aannyytthhiinngg  tthhaatt
  1488.        yyoouu aarreenn''tt wwiilllliinngg ttoo rreeddoo..
  1489.  
  1490. SSIIGGNNAALLSS
  1491.        _p_g_a_w_k  accepts  two  signals.  SSIIGGUUSSRR11 causes it    to dump    a
  1492.        profile and function call stack to the profile file, which
  1493.        is either aawwkkpprrooff..oouutt, or whatever file was named with the
  1494.        ----pprrooffiillee option.   It  then  continues    to  run.   SSIIGGHHUUPP
  1495.        causes  it to dump the profile and function call    stack and
  1496.        then exit.
  1497.  
  1498. EEXXAAMMPPLLEESS
  1499.        Print and sort the login    names of all users:
  1500.  
  1501.         BBEEGGIINN     {{    FFSS == ""::"" }}
  1502.          {{ pprriinntt $$11 || ""ssoorrtt"" }}
  1503.  
  1504.        Count lines in a    file:
  1505.  
  1506.          {{ nnlliinneess++++ }}
  1507.         EENNDD     {{ pprriinntt nnlliinneess    }}
  1508.  
  1509.        Precede each line by its    number in the file:
  1510.  
  1511.         {{ pprriinntt FFNNRR,, $$00 }}
  1512.  
  1513.        Concatenate and line number (a variation    on a theme):
  1514.  
  1515.         {{ pprriinntt NNRR,,    $$00 }}
  1516.  
  1517. IINNTTEERRNNAATTIIOONNAALLIIZZAATTIIOONN
  1518.        String constants    are sequences of characters  enclosed  in
  1519.        double  quotes.     In non-English    speaking environments, it
  1520.        is possible to mark strings in the AWK program as  requir
  1521.        ing  translation     to  the  native  natural  language. Such
  1522.        strings are marked in  the  AWK    program     with  a  leading
  1523.        underscore ("_").  For example,
  1524.  
  1525.           ggaawwkk ''BBEEGGIINN {{ pprriinntt ""hheelllloo,, wwoorrlldd"" }}''
  1526.  
  1527.        always prints hheelllloo,, wwoorrlldd.  But,
  1528.  
  1529.           ggaawwkk ''BBEEGGIINN {{ pprriinntt __""hheelllloo,, wwoorrlldd"" }}''
  1530.  
  1531.        might print bboonnjjoouurr,, mmoonnddee in France.
  1532.  
  1533.        There  are several steps    involved in producing and running
  1534.        a localizable AWK program.
  1535.  
  1536.        1.  Add a BBEEGGIINN action to assign    a value    to the TTEEXXTTDDOOMMAAIINN
  1537.        variable  to     set the text domain to    a name associated
  1538.        with    your program.
  1539.  
  1540.         BBEEGGIINN {{    TTEEXXTTDDOOMMAAIINN == ""mmyypprroogg"" }}
  1541.  
  1542.        This    allows _g_a_w_k to find the    ..mmoo file associated  with
  1543.        your     program.   Without this step, _g_a_w_k uses the mmeess
  1544.        ssaaggeess text  domain,    which  likely  does  not  contain
  1545.        translations    for your program.
  1546.  
  1547.        2.  Mark     all strings that should be translated with lead
  1548.        ing underscores.
  1549.  
  1550.        3.  If necessary, use the ddccggeetttteexxtt(())  and/or  bbiinnddtteexxttddoo
  1551.        mmaaiinn(()) functions in your program, as    appropriate.
  1552.  
  1553.        4.  Run    ggaawwkk ----ggeenn--ppoo --ff mmyypprroogg..aawwkk >> mmyypprroogg..ppoo    to gener
  1554.        ate a ..ppoo file for your program.
  1555.  
  1556.        5.  Provide  appropriate     translations,    and   build   and
  1557.        install a corresponding ..mmoo file.
  1558.  
  1559.        The  internationalization  features  are    described in full
  1560.        detail in _G_A_W_K_: _E_f_f_e_c_t_i_v_e _A_W_K _P_r_o_g_r_a_m_m_i_n_g.
  1561.  
  1562. PPOOSSIIXX CCOOMMPPAATTIIBBIILLIITTYY
  1563.        A primary goal for _g_a_w_k is compatibility     with  the  POSIX
  1564.        standard,  as well as with the latest version of    UNIX _a_w_k.
  1565.        To this end, _g_a_w_k incorporates the following user  visible
  1566.        features     which are not described in the    AWK book, but are
  1567.        part of the Bell    Laboratories version of    _a_w_k, and  are  in
  1568.        the POSIX standard.
  1569.  
  1570.        The  book  indicates that command line variable assignment
  1571.        happens when _a_w_k    would otherwise    open the  argument  as    a
  1572.        file,  which  is     after the BBEEGGIINN block is executed.  How
  1573.        ever, in    earlier    implementations, when such an  assignment
  1574.        appeared     before    any file names,    the assignment would hap
  1575.        pen _b_e_f_o_r_e the BBEEGGIINN block was run.  Applications came  to
  1576.        depend  on  this    "feature."  When _a_w_k was changed to match
  1577.        its documentation, the --vv option    for  assigning    variables
  1578.        before program execution    was added to accommodate applica
  1579.        tions that depended upon    the old    behavior.  (This  feature
  1580.        was  agreed upon    by both    the Bell Laboratories and the GNU
  1581.        developers.)
  1582.  
  1583.        The --WW option for implementation    specific features is from
  1584.        the POSIX standard.
  1585.  
  1586.        When  processing     arguments,  _g_a_w_k uses the special option
  1587.        "--" to signal the end  of  arguments.    In  compatibility
  1588.        mode,  it  warns     about    but  otherwise    ignores    undefined
  1589.        options.     In normal operation, such arguments  are  passed
  1590.        on to the AWK program for it to process.
  1591.  
  1592.        The  AWK    book does not define the return    value of ssrraanndd(()).
  1593.        The POSIX standard has it return    the seed it was    using, to
  1594.        allow keeping track of random number sequences.    Therefore
  1595.        ssrraanndd(()) in _g_a_w_k also returns its    current    seed.
  1596.  
  1597.        Other new features are: The use    of  multiple  --ff  options
  1598.        (from  MKS  _a_w_k); the EENNVVIIRROONN array; the    \\aa, and    \\vv escape
  1599.        sequences (done originally in _g_a_w_k and fed back    into  the
  1600.        Bell  Laboratories  version);  the ttoolloowweerr(()) and    ttoouuppppeerr(())
  1601.        built-in    functions (from    the Bell  Laboratories    version);
  1602.        and  the     ANSI C    conversion specifications in pprriinnttff (done
  1603.        first in    the Bell Laboratories version).
  1604.  
  1605. HHIISSTTOORRIICCAALL FFEEAATTUURREESS
  1606.        There are two features of historical  AWK  implementations
  1607.        that  _g_a_w_k  supports.   First,  it is possible to call the
  1608.        lleennggtthh(())    built-in function not only with    no argument,  but
  1609.        even without parentheses!  Thus,
  1610.  
  1611.           aa    == lleennggtthh     ## HHoollyy AAllggooll 6600,, BBaattmmaann!!
  1612.  
  1613.        is the same as either of
  1614.  
  1615.           aa    == lleennggtthh(())
  1616.           aa    == lleennggtthh(($$00))
  1617.  
  1618.        This  feature is    marked as "deprecated" in the POSIX stan
  1619.        dard, and _g_a_w_k issues a warning about its use if    ----lliinntt is
  1620.        specified on the    command    line.
  1621.  
  1622.        The other feature is the    use of either the ccoonnttiinnuuee or the
  1623.        bbrreeaakk statements    outside    the body of a wwhhiillee, ffoorr,  or  ddoo
  1624.        loop.   Traditional  AWK    implementations    have treated such
  1625.        usage as    equivalent to the nneexxtt statement.  _G_a_w_k     supports
  1626.        this usage if ----ttrraaddiittiioonnaall has been specified.
  1627.  
  1628. GGNNUU EEXXTTEENNSSIIOONNSS
  1629.        _G_a_w_k  has  a  number of extensions to POSIX _a_w_k.     They are
  1630.        described in this section.  All the  extensions    described
  1631.        here  can  be  disabled by invoking _g_a_w_k    with the ----ttrraaddii
  1632.        ttiioonnaall option.
  1633.  
  1634.        The following features of _g_a_w_k are not available    in  POSIX
  1635.        _a_w_k.
  1636.  
  1637.     No  path  search is performed for files    named via the --ff
  1638.      option.  Therefore the    AAWWKKPPAATTHH    environment  variable  is
  1639.      not special.
  1640.  
  1641.     The \\xx escape sequence.     (Disabled with    ----ppoossiixx.)
  1642.  
  1643.     The fffflluusshh(()) function.    (Disabled with ----ppoossiixx.)
  1644.  
  1645.     The ability to continue    lines after ??  and ::.  (Disabled
  1646.      with ----ppoossiixx.)
  1647.  
  1648.     Octal and hexadecimal constants    in AWK programs.
  1649.  
  1650.     The AARRGGIINNDD, BBIINNMMOODDEE,  EERRRRNNOO,  LLIINNTT,  RRTT     and  TTEEXXTTDDOOMMAAIINN
  1651.      variables are not special.
  1652.  
  1653.     The  IIGGNNOORREECCAASSEE     variable  and    its side-effects are not
  1654.      available.
  1655.  
  1656.     The FFIIEELLDDWWIIDDTTHHSS    variable and  fixed-width  field  split
  1657.      ting.
  1658.  
  1659.     The PPRROOCCIINNFFOO array is not available.
  1660.  
  1661.     The use    of RRSS as a regular expression.
  1662.  
  1663.     The special file names available for I/O redirection are
  1664.      not recognized.
  1665.  
  1666.     The ||&& operator    for creating co-processes.
  1667.  
  1668.     The ability to split out individual characters using the
  1669.      null  string  as the value of FFSS, and as the third argu
  1670.      ment to sspplliitt(()).
  1671.  
  1672.     The optional second argument to    the cclloossee(()) function.
  1673.  
  1674.     The optional third argument to the mmaattcchh(()) function.
  1675.  
  1676.     The ability to use positional specifiers with pprriinnttff and
  1677.      sspprriinnttff(()).
  1678.  
  1679.     The use    of ddeelleettee _a_r_r_a_y    to delete the entire contents of
  1680.      an array.
  1681.  
  1682.     The use    of nneexxttffiillee to abandon processing of the current
  1683.      input file.
  1684.  
  1685.     The  aanndd(()),  aassoorrtt(()),  bbiinnddtteexxttddoommaaiinn(()), ccoommppll(()), ddccggeett
  1686.      tteexxtt(()), ggeennssuubb(()), llsshhiifftt(()),  mmkkttiimmee(()),     oorr(()),    rrsshhiifftt(()),
  1687.      ssttrrffttiimmee(()), ssttrrttoonnuumm(()), ssyyssttiimmee(()) and xxoorr(()) functions.
  1688.  
  1689.     Localizable strings.
  1690.  
  1691.     Adding    new  built-in  functions  dynamically  with  the
  1692.      eexxtteennssiioonn(()) function.
  1693.  
  1694.        The AWK book does not  define  the  return  value  of  the
  1695.        cclloossee(())    function.   _G_a_w_k's cclloossee(()) returns the value from
  1696.        _f_c_l_o_s_e(3), or _p_c_l_o_s_e(3),    when closing an     output     file  or
  1697.        pipe,  respectively.  It    returns    the process's exit status
  1698.        when closing an input pipe.  The    return value is    -1 if the
  1699.        named file, pipe    or co-process was not opened with a redi
  1700.        rection.
  1701.  
  1702.        When _g_a_w_k is invoked with the ----ttrraaddiittiioonnaall option, if the
  1703.        _f_s argument to the --FF option is "t", then FFSS is set to the
  1704.        tab character.  Note that typing     ggaawwkk  --FF\\tt  ......   simply
  1705.        causes the shell    to quote the "t,", and does not    pass "\t"
  1706.        to the --FF option.  Since    this is     a  rather  ugly  special
  1707.        case,  it is not    the default behavior.  This behavior also
  1708.        does not    occur if ----ppoossiixx has been specified.   To  really
  1709.        get  a tab character as the field separator, it is best to
  1710.        use single quotes: ggaawwkk --FF''\\tt'' .......
  1711.  
  1712. EENNVVIIRROONNMMEENNTT VVAARRIIAABBLLEESS
  1713.        The AAWWKKPPAATTHH environment variable    can be used to provide    a
  1714.        list  of     directories  that _g_a_w_k    searches when looking for
  1715.        files named via the --ff and ----ffiillee options.
  1716.  
  1717.        If PPOOSSIIXXLLYY__CCOORRRREECCTT exists in the     environment,  then  _g_a_w_k
  1718.        behaves    exactly     as  if    ----ppoossiixx    had been specified on the
  1719.        command line.  If ----lliinntt    has been specified, _g_a_w_k issues    a
  1720.        warning message to this effect.
  1721.  
  1722. SSEEEE AALLSSOO
  1723.        _e_g_r_e_p(1),  _g_e_t_p_i_d(2),  _g_e_t_p_p_i_d(2),  _g_e_t_p_g_r_p(2), _g_e_t_u_i_d(2),
  1724.        _g_e_t_e_u_i_d(2), _g_e_t_g_i_d(2), _g_e_t_e_g_i_d(2), _g_e_t_g_r_o_u_p_s(2)
  1725.  
  1726.        _T_h_e _A_W_K _P_r_o_g_r_a_m_m_i_n_g _L_a_n_g_u_a_g_e,  Alfred  V.  Aho,    Brian  W.
  1727.        Kernighan,  Peter  J.  Weinberger,  Addison-Wesley,  1988.
  1728.        ISBN 0-201-07981-X.
  1729.  
  1730.        _G_A_W_K_: _E_f_f_e_c_t_i_v_e _A_W_K _P_r_o_g_r_a_m_m_i_n_g,    Edition    3.0, published by
  1731.        the Free    Software Foundation, 2001.
  1732.  
  1733. BBUUGGSS
  1734.        The  --FF    option    is  not     necessary given the command line
  1735.        variable    assignment feature; it remains only for    backwards
  1736.        compatibility.
  1737.  
  1738.        Syntactically  invalid  single  character programs tend to
  1739.        overflow    the parse stack, generating  a    rather    unhelpful
  1740.        message.      Such    programs  are  surprisingly  difficult to
  1741.        diagnose    in the completely general case,    and the    effort to
  1742.        do so really is not worth it.
  1743.  
  1744. AAUUTTHHOORRSS
  1745.        The  original  version of UNIX _a_w_k was designed and imple
  1746.        mented  by  Alfred  Aho,     Peter    Weinberger,   and   Brian
  1747.        Kernighan of Bell Laboratories.    Brian Kernighan    continues
  1748.        to maintain and enhance it.
  1749.  
  1750.        Paul Rubin and Jay Fenlason, of the Free    Software  Founda
  1751.        tion,  wrote _g_a_w_k, to be    compatible with    the original ver
  1752.        sion of _a_w_k distributed in  Seventh  Edition  UNIX.   John
  1753.        Woods  contributed  a number of bug fixes.  David Trueman,
  1754.        with contributions from Arnold Robbins, made _g_a_w_k compati
  1755.        ble  with  the new version of UNIX _a_w_k.    Arnold Robbins is
  1756.        the current maintainer.
  1757.  
  1758.        The initial DOS port was    done by     Conrad     Kwok  and  Scott
  1759.        Garfinkle.   Scott  Deifik  is the current DOS maintainer.
  1760.        Pat Rankin did the port to VMS, and Michal Jaegermann  did
  1761.        the  port  to  the Atari    ST.  The port to OS/2 was done by
  1762.        Kai Uwe Rommel, with contributions and  help  from  Darrel
  1763.        Hankerson.   Fred  Fish    supplied  support  for the Amiga,
  1764.        Stephen Davies provided the Tandem port,    and Martin  Brown
  1765.        provided    the BeOS port.
  1766.  
  1767. VVEERRSSIIOONN    IINNFFOORRMMAATTIIOONN
  1768.        This man    page documents _g_a_w_k, version 3.1.0.
  1769.  
  1770. BBUUGG RREEPPOORRTTSS
  1771.        If  you find a bug in _g_a_w_k, please send electronic mail to
  1772.        bbuugg--ggaawwkk@@ggnnuu..oorrgg.  Please include  your    operating  system
  1773.        and  its     revision,  the    version    of _g_a_w_k    (from ggaawwkk ----vveerr
  1774.        ssiioonn), what C compiler you used to compile it, and a  test
  1775.        program    and data that are as small as possible for repro
  1776.        ducing the problem.
  1777.  
  1778.        Before sending a    bug report, please do two things.  First,
  1779.        verify  that  you  have    the latest version of _g_a_w_k.  Many
  1780.        bugs (usually subtle ones) are fixed at each release,  and
  1781.        if yours    is out of date,    the problem may    already    have been
  1782.        solved.     Second,  please  read    this  man  page     and  the
  1783.        reference  manual carefully to be sure that what    you think
  1784.        is a bug    really is, instead of just a quirk  in    the  lan
  1785.        guage.
  1786.  
  1787.        Whatever      you    do,   do   NNOOTT     post  a  bug  report  in
  1788.        ccoommpp..llaanngg..aawwkk.  While  the  _g_a_w_k     developers  occasionally
  1789.        read this newsgroup, posting bug    reports    there is an unre
  1790.        liable way to report bugs.  Instead, please use the  elec
  1791.        tronic mail addresses given above.
  1792.  
  1793. AACCKKNNOOWWLLEEDDGGEEMMEENNTTSS
  1794.        Brian  Kernighan     of  Bell  Laboratories    provided valuable
  1795.        assistance during testing and debugging.     We thank him.
  1796.  
  1797. CCOOPPYYIINNGG    PPEERRMMIISSSSIIOONNSS
  1798.        Copyright  1989,    1991,  1992,  1993,  1994,  1995,  1996,
  1799.        1997,  1998,  1999,  2001,  2002    Free Software Foundation,
  1800.        Inc.
  1801.  
  1802.        Permission is granted  to  make    and  distribute     verbatim
  1803.        copies  of  this    manual page provided the copyright notice
  1804.        and this    permission notice are preserved    on all copies.
  1805.  
  1806.        Permission is granted to    copy and distribute modified ver
  1807.        sions  of this manual page under    the conditions for verba
  1808.        tim copying, provided that the  entire  resulting  derived
  1809.        work is distributed under the terms of a    permission notice
  1810.        identical to this one.
  1811.  
  1812.        Permission is granted to    copy and distribute  translations
  1813.        of this manual page into    another    language, under    the above
  1814.        conditions for modified versions, except    that this permis
  1815.        sion notice may be stated in a translation approved by the
  1816.        Foundation.
  1817.  
  1818.  
  1819.  
  1820. Free Software Foundation   Apr 16 2002              GAWK(1)
  1821.